diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..25cb845
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,638 @@
+[*]
+charset = utf-8
+end_of_line = lf
+indent_size = 2
+indent_style = space
+insert_final_newline = false
+max_line_length = 100
+tab_width = 2
+ij_continuation_indent_size = 4
+ij_formatter_off_tag = @formatter:off
+ij_formatter_on_tag = @formatter:on
+ij_formatter_tags_enabled = false
+ij_smart_tabs = false
+ij_visual_guides = none
+ij_wrap_on_typing = false
+
+[*.java]
+ij_java_align_consecutive_assignments = false
+ij_java_align_consecutive_variable_declarations = false
+ij_java_align_group_field_declarations = false
+ij_java_align_multiline_annotation_parameters = false
+ij_java_align_multiline_array_initializer_expression = false
+ij_java_align_multiline_assignment = false
+ij_java_align_multiline_binary_operation = false
+ij_java_align_multiline_chained_methods = false
+ij_java_align_multiline_extends_list = false
+ij_java_align_multiline_for = false
+ij_java_align_multiline_method_parentheses = false
+ij_java_align_multiline_parameters = false
+ij_java_align_multiline_parameters_in_calls = false
+ij_java_align_multiline_parenthesized_expression = false
+ij_java_align_multiline_records = true
+ij_java_align_multiline_resources = false
+ij_java_align_multiline_ternary_operation = false
+ij_java_align_multiline_text_blocks = false
+ij_java_align_multiline_throws_list = false
+ij_java_align_subsequent_simple_methods = false
+ij_java_align_throws_keyword = false
+ij_java_annotation_parameter_wrap = off
+ij_java_array_initializer_new_line_after_left_brace = false
+ij_java_array_initializer_right_brace_on_new_line = false
+ij_java_array_initializer_wrap = normal
+ij_java_assert_statement_colon_on_next_line = false
+ij_java_assert_statement_wrap = off
+ij_java_assignment_wrap = off
+ij_java_binary_operation_sign_on_next_line = true
+ij_java_binary_operation_wrap = normal
+ij_java_blank_lines_after_anonymous_class_header = 0
+ij_java_blank_lines_after_class_header = 1
+ij_java_blank_lines_after_imports = 1
+ij_java_blank_lines_after_package = 1
+ij_java_blank_lines_around_class = 1
+ij_java_blank_lines_around_field = 0
+ij_java_blank_lines_around_field_in_interface = 0
+ij_java_blank_lines_around_initializer = 1
+ij_java_blank_lines_around_method = 1
+ij_java_blank_lines_around_method_in_interface = 1
+ij_java_blank_lines_before_class_end = 0
+ij_java_blank_lines_before_imports = 1
+ij_java_blank_lines_before_method_body = 0
+ij_java_blank_lines_before_package = 0
+ij_java_block_brace_style = end_of_line
+ij_java_block_comment_add_space = false
+ij_java_block_comment_at_first_column = true
+ij_java_builder_methods = none
+ij_java_call_parameters_new_line_after_left_paren = false
+ij_java_call_parameters_right_paren_on_new_line = false
+ij_java_call_parameters_wrap = normal
+ij_java_case_statement_on_separate_line = true
+ij_java_catch_on_new_line = false
+ij_java_class_annotation_wrap = split_into_lines
+ij_java_class_brace_style = end_of_line
+ij_java_class_count_to_use_import_on_demand = 999
+ij_java_class_names_in_javadoc = 1
+ij_java_do_not_indent_top_level_class_members = false
+ij_java_do_not_wrap_after_single_annotation = false
+ij_java_do_while_brace_force = always
+ij_java_doc_add_blank_line_after_description = true
+ij_java_doc_add_blank_line_after_param_comments = false
+ij_java_doc_add_blank_line_after_return = false
+ij_java_doc_add_p_tag_on_empty_lines = true
+ij_java_doc_align_exception_comments = true
+ij_java_doc_align_param_comments = true
+ij_java_doc_do_not_wrap_if_one_line = false
+ij_java_doc_enable_formatting = true
+ij_java_doc_enable_leading_asterisks = true
+ij_java_doc_indent_on_continuation = false
+ij_java_doc_keep_empty_lines = true
+ij_java_doc_keep_empty_parameter_tag = true
+ij_java_doc_keep_empty_return_tag = true
+ij_java_doc_keep_empty_throws_tag = true
+ij_java_doc_keep_invalid_tags = true
+ij_java_doc_param_description_on_new_line = false
+ij_java_doc_preserve_line_breaks = false
+ij_java_doc_use_throws_not_exception_tag = true
+ij_java_else_on_new_line = false
+ij_java_enum_constants_wrap = off
+ij_java_extends_keyword_wrap = off
+ij_java_extends_list_wrap = normal
+ij_java_field_annotation_wrap = split_into_lines
+ij_java_finally_on_new_line = false
+ij_java_for_brace_force = always
+ij_java_for_statement_new_line_after_left_paren = false
+ij_java_for_statement_right_paren_on_new_line = false
+ij_java_for_statement_wrap = normal
+ij_java_generate_final_locals = false
+ij_java_generate_final_parameters = false
+ij_java_if_brace_force = always
+ij_java_imports_layout = $*, |, *
+ij_java_indent_case_from_switch = true
+ij_java_insert_inner_class_imports = true
+ij_java_insert_override_annotation = true
+ij_java_keep_blank_lines_before_right_brace = 2
+ij_java_keep_blank_lines_between_package_declaration_and_header = 2
+ij_java_keep_blank_lines_in_code = 1
+ij_java_keep_blank_lines_in_declarations = 2
+ij_java_keep_builder_methods_indents = false
+ij_java_keep_control_statement_in_one_line = false
+ij_java_keep_first_column_comment = true
+ij_java_keep_indents_on_empty_lines = false
+ij_java_keep_line_breaks = true
+ij_java_keep_multiple_expressions_in_one_line = false
+ij_java_keep_simple_blocks_in_one_line = false
+ij_java_keep_simple_classes_in_one_line = false
+ij_java_keep_simple_lambdas_in_one_line = false
+ij_java_keep_simple_methods_in_one_line = false
+ij_java_label_indent_absolute = false
+ij_java_label_indent_size = 0
+ij_java_lambda_brace_style = end_of_line
+ij_java_layout_static_imports_separately = true
+ij_java_line_comment_add_space = false
+ij_java_line_comment_at_first_column = true
+ij_java_method_annotation_wrap = split_into_lines
+ij_java_method_brace_style = end_of_line
+ij_java_method_call_chain_wrap = normal
+ij_java_method_parameters_new_line_after_left_paren = false
+ij_java_method_parameters_right_paren_on_new_line = false
+ij_java_method_parameters_wrap = normal
+ij_java_modifier_list_wrap = false
+ij_java_names_count_to_use_import_on_demand = 999
+ij_java_new_line_after_lparen_in_record_header = false
+ij_java_parameter_annotation_wrap = off
+ij_java_parentheses_expression_new_line_after_left_paren = false
+ij_java_parentheses_expression_right_paren_on_new_line = false
+ij_java_place_assignment_sign_on_next_line = false
+ij_java_prefer_longer_names = true
+ij_java_prefer_parameters_wrap = false
+ij_java_record_components_wrap = normal
+ij_java_repeat_synchronized = true
+ij_java_replace_instanceof_and_cast = false
+ij_java_replace_null_check = true
+ij_java_replace_sum_lambda_with_method_ref = true
+ij_java_resource_list_new_line_after_left_paren = false
+ij_java_resource_list_right_paren_on_new_line = false
+ij_java_resource_list_wrap = off
+ij_java_rparen_on_new_line_in_record_header = false
+ij_java_space_after_closing_angle_bracket_in_type_argument = false
+ij_java_space_after_colon = true
+ij_java_space_after_comma = true
+ij_java_space_after_comma_in_type_arguments = true
+ij_java_space_after_for_semicolon = true
+ij_java_space_after_quest = true
+ij_java_space_after_type_cast = true
+ij_java_space_before_annotation_array_initializer_left_brace = false
+ij_java_space_before_annotation_parameter_list = false
+ij_java_space_before_array_initializer_left_brace = false
+ij_java_space_before_catch_keyword = true
+ij_java_space_before_catch_left_brace = true
+ij_java_space_before_catch_parentheses = true
+ij_java_space_before_class_left_brace = true
+ij_java_space_before_colon = true
+ij_java_space_before_colon_in_foreach = true
+ij_java_space_before_comma = false
+ij_java_space_before_do_left_brace = true
+ij_java_space_before_else_keyword = true
+ij_java_space_before_else_left_brace = true
+ij_java_space_before_finally_keyword = true
+ij_java_space_before_finally_left_brace = true
+ij_java_space_before_for_left_brace = true
+ij_java_space_before_for_parentheses = true
+ij_java_space_before_for_semicolon = false
+ij_java_space_before_if_left_brace = true
+ij_java_space_before_if_parentheses = true
+ij_java_space_before_method_call_parentheses = false
+ij_java_space_before_method_left_brace = true
+ij_java_space_before_method_parentheses = false
+ij_java_space_before_opening_angle_bracket_in_type_parameter = false
+ij_java_space_before_quest = true
+ij_java_space_before_switch_left_brace = true
+ij_java_space_before_switch_parentheses = true
+ij_java_space_before_synchronized_left_brace = true
+ij_java_space_before_synchronized_parentheses = true
+ij_java_space_before_try_left_brace = true
+ij_java_space_before_try_parentheses = true
+ij_java_space_before_type_parameter_list = false
+ij_java_space_before_while_keyword = true
+ij_java_space_before_while_left_brace = true
+ij_java_space_before_while_parentheses = true
+ij_java_space_inside_one_line_enum_braces = false
+ij_java_space_within_empty_array_initializer_braces = false
+ij_java_space_within_empty_method_call_parentheses = false
+ij_java_space_within_empty_method_parentheses = false
+ij_java_spaces_around_additive_operators = true
+ij_java_spaces_around_assignment_operators = true
+ij_java_spaces_around_bitwise_operators = true
+ij_java_spaces_around_equality_operators = true
+ij_java_spaces_around_lambda_arrow = true
+ij_java_spaces_around_logical_operators = true
+ij_java_spaces_around_method_ref_dbl_colon = false
+ij_java_spaces_around_multiplicative_operators = true
+ij_java_spaces_around_relational_operators = true
+ij_java_spaces_around_shift_operators = true
+ij_java_spaces_around_type_bounds_in_type_parameters = true
+ij_java_spaces_around_unary_operator = false
+ij_java_spaces_within_angle_brackets = false
+ij_java_spaces_within_annotation_parentheses = false
+ij_java_spaces_within_array_initializer_braces = false
+ij_java_spaces_within_braces = false
+ij_java_spaces_within_brackets = false
+ij_java_spaces_within_cast_parentheses = false
+ij_java_spaces_within_catch_parentheses = false
+ij_java_spaces_within_for_parentheses = false
+ij_java_spaces_within_if_parentheses = false
+ij_java_spaces_within_method_call_parentheses = false
+ij_java_spaces_within_method_parentheses = false
+ij_java_spaces_within_parentheses = false
+ij_java_spaces_within_record_header = false
+ij_java_spaces_within_switch_parentheses = false
+ij_java_spaces_within_synchronized_parentheses = false
+ij_java_spaces_within_try_parentheses = false
+ij_java_spaces_within_while_parentheses = false
+ij_java_special_else_if_treatment = true
+ij_java_subclass_name_suffix = Impl
+ij_java_ternary_operation_signs_on_next_line = true
+ij_java_ternary_operation_wrap = normal
+ij_java_test_name_suffix = Test
+ij_java_throws_keyword_wrap = normal
+ij_java_throws_list_wrap = off
+ij_java_use_external_annotations = false
+ij_java_use_fq_class_names = false
+ij_java_use_relative_indents = false
+ij_java_use_single_class_imports = true
+ij_java_variable_annotation_wrap = off
+ij_java_visibility = public
+ij_java_while_brace_force = always
+ij_java_while_on_new_line = false
+ij_java_wrap_comments = true
+ij_java_wrap_first_method_in_call_chain = false
+ij_java_wrap_long_lines = false
+
+[*.properties]
+ij_properties_align_group_field_declarations = false
+ij_properties_keep_blank_lines = false
+ij_properties_key_value_delimiter = equals
+ij_properties_spaces_around_key_value_delimiter = false
+
+[.editorconfig]
+ij_editorconfig_align_group_field_declarations = false
+ij_editorconfig_space_after_colon = false
+ij_editorconfig_space_after_comma = true
+ij_editorconfig_space_before_colon = false
+ij_editorconfig_space_before_comma = false
+ij_editorconfig_spaces_around_assignment_operators = true
+
+[{*.ant,*.fxml,*.jhm,*.jnlp,*.jrxml,*.jspx,*.pom,*.rng,*.tagx,*.tld,*.wsdl,*.xml,*.xsd,*.xsl,*.xslt,*.xul}]
+ij_continuation_indent_size = 2
+ij_xml_align_attributes = false
+ij_xml_align_text = false
+ij_xml_attribute_wrap = normal
+ij_xml_block_comment_add_space = false
+ij_xml_block_comment_at_first_column = true
+ij_xml_keep_blank_lines = 2
+ij_xml_keep_indents_on_empty_lines = false
+ij_xml_keep_line_breaks = true
+ij_xml_keep_line_breaks_in_text = true
+ij_xml_keep_whitespaces = false
+ij_xml_keep_whitespaces_around_cdata = preserve
+ij_xml_keep_whitespaces_inside_cdata = false
+ij_xml_line_comment_at_first_column = true
+ij_xml_space_after_tag_name = false
+ij_xml_space_around_equals_in_attribute = false
+ij_xml_space_inside_empty_tag = false
+ij_xml_text_wrap = normal
+ij_xml_use_custom_settings = true
+
+[{*.bash,*.sh,*.zsh}]
+ij_shell_binary_ops_start_line = false
+ij_shell_keep_column_alignment_padding = false
+ij_shell_minify_program = false
+ij_shell_redirect_followed_by_space = false
+ij_shell_switch_cases_indented = false
+ij_shell_use_unix_line_separator = true
+
+[{*.gant,*.groovy,*.gy}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_groovy_align_group_field_declarations = false
+ij_groovy_align_multiline_array_initializer_expression = false
+ij_groovy_align_multiline_assignment = false
+ij_groovy_align_multiline_binary_operation = false
+ij_groovy_align_multiline_chained_methods = false
+ij_groovy_align_multiline_extends_list = false
+ij_groovy_align_multiline_for = true
+ij_groovy_align_multiline_list_or_map = true
+ij_groovy_align_multiline_method_parentheses = false
+ij_groovy_align_multiline_parameters = true
+ij_groovy_align_multiline_parameters_in_calls = false
+ij_groovy_align_multiline_resources = true
+ij_groovy_align_multiline_ternary_operation = false
+ij_groovy_align_multiline_throws_list = false
+ij_groovy_align_named_args_in_map = true
+ij_groovy_align_throws_keyword = false
+ij_groovy_array_initializer_new_line_after_left_brace = false
+ij_groovy_array_initializer_right_brace_on_new_line = false
+ij_groovy_array_initializer_wrap = off
+ij_groovy_assert_statement_wrap = off
+ij_groovy_assignment_wrap = off
+ij_groovy_binary_operation_wrap = off
+ij_groovy_blank_lines_after_class_header = 0
+ij_groovy_blank_lines_after_imports = 1
+ij_groovy_blank_lines_after_package = 1
+ij_groovy_blank_lines_around_class = 1
+ij_groovy_blank_lines_around_field = 0
+ij_groovy_blank_lines_around_field_in_interface = 0
+ij_groovy_blank_lines_around_method = 1
+ij_groovy_blank_lines_around_method_in_interface = 1
+ij_groovy_blank_lines_before_imports = 1
+ij_groovy_blank_lines_before_method_body = 0
+ij_groovy_blank_lines_before_package = 0
+ij_groovy_block_brace_style = end_of_line
+ij_groovy_block_comment_add_space = false
+ij_groovy_block_comment_at_first_column = true
+ij_groovy_call_parameters_new_line_after_left_paren = false
+ij_groovy_call_parameters_right_paren_on_new_line = false
+ij_groovy_call_parameters_wrap = off
+ij_groovy_catch_on_new_line = false
+ij_groovy_class_annotation_wrap = split_into_lines
+ij_groovy_class_brace_style = end_of_line
+ij_groovy_class_count_to_use_import_on_demand = 5
+ij_groovy_do_while_brace_force = never
+ij_groovy_else_on_new_line = false
+ij_groovy_enum_constants_wrap = off
+ij_groovy_extends_keyword_wrap = off
+ij_groovy_extends_list_wrap = off
+ij_groovy_field_annotation_wrap = split_into_lines
+ij_groovy_finally_on_new_line = false
+ij_groovy_for_brace_force = never
+ij_groovy_for_statement_new_line_after_left_paren = false
+ij_groovy_for_statement_right_paren_on_new_line = false
+ij_groovy_for_statement_wrap = off
+ij_groovy_if_brace_force = never
+ij_groovy_import_annotation_wrap = 2
+ij_groovy_imports_layout = *, |, javax.**, java.**, |, $*
+ij_groovy_indent_case_from_switch = true
+ij_groovy_indent_label_blocks = true
+ij_groovy_insert_inner_class_imports = false
+ij_groovy_keep_blank_lines_before_right_brace = 2
+ij_groovy_keep_blank_lines_in_code = 2
+ij_groovy_keep_blank_lines_in_declarations = 2
+ij_groovy_keep_control_statement_in_one_line = true
+ij_groovy_keep_first_column_comment = true
+ij_groovy_keep_indents_on_empty_lines = false
+ij_groovy_keep_line_breaks = true
+ij_groovy_keep_multiple_expressions_in_one_line = false
+ij_groovy_keep_simple_blocks_in_one_line = false
+ij_groovy_keep_simple_classes_in_one_line = true
+ij_groovy_keep_simple_lambdas_in_one_line = true
+ij_groovy_keep_simple_methods_in_one_line = true
+ij_groovy_label_indent_absolute = false
+ij_groovy_label_indent_size = 0
+ij_groovy_lambda_brace_style = end_of_line
+ij_groovy_layout_static_imports_separately = true
+ij_groovy_line_comment_add_space = false
+ij_groovy_line_comment_at_first_column = true
+ij_groovy_method_annotation_wrap = split_into_lines
+ij_groovy_method_brace_style = end_of_line
+ij_groovy_method_call_chain_wrap = off
+ij_groovy_method_parameters_new_line_after_left_paren = false
+ij_groovy_method_parameters_right_paren_on_new_line = false
+ij_groovy_method_parameters_wrap = off
+ij_groovy_modifier_list_wrap = false
+ij_groovy_names_count_to_use_import_on_demand = 3
+ij_groovy_packages_to_use_import_on_demand = java.awt.*, javax.swing.*
+ij_groovy_parameter_annotation_wrap = off
+ij_groovy_parentheses_expression_new_line_after_left_paren = false
+ij_groovy_parentheses_expression_right_paren_on_new_line = false
+ij_groovy_prefer_parameters_wrap = false
+ij_groovy_resource_list_new_line_after_left_paren = false
+ij_groovy_resource_list_right_paren_on_new_line = false
+ij_groovy_resource_list_wrap = off
+ij_groovy_space_after_assert_separator = true
+ij_groovy_space_after_colon = true
+ij_groovy_space_after_comma = true
+ij_groovy_space_after_comma_in_type_arguments = true
+ij_groovy_space_after_for_semicolon = true
+ij_groovy_space_after_quest = true
+ij_groovy_space_after_type_cast = true
+ij_groovy_space_before_annotation_parameter_list = false
+ij_groovy_space_before_array_initializer_left_brace = false
+ij_groovy_space_before_assert_separator = false
+ij_groovy_space_before_catch_keyword = true
+ij_groovy_space_before_catch_left_brace = true
+ij_groovy_space_before_catch_parentheses = true
+ij_groovy_space_before_class_left_brace = true
+ij_groovy_space_before_closure_left_brace = true
+ij_groovy_space_before_colon = true
+ij_groovy_space_before_comma = false
+ij_groovy_space_before_do_left_brace = true
+ij_groovy_space_before_else_keyword = true
+ij_groovy_space_before_else_left_brace = true
+ij_groovy_space_before_finally_keyword = true
+ij_groovy_space_before_finally_left_brace = true
+ij_groovy_space_before_for_left_brace = true
+ij_groovy_space_before_for_parentheses = true
+ij_groovy_space_before_for_semicolon = false
+ij_groovy_space_before_if_left_brace = true
+ij_groovy_space_before_if_parentheses = true
+ij_groovy_space_before_method_call_parentheses = false
+ij_groovy_space_before_method_left_brace = true
+ij_groovy_space_before_method_parentheses = false
+ij_groovy_space_before_quest = true
+ij_groovy_space_before_record_parentheses = false
+ij_groovy_space_before_switch_left_brace = true
+ij_groovy_space_before_switch_parentheses = true
+ij_groovy_space_before_synchronized_left_brace = true
+ij_groovy_space_before_synchronized_parentheses = true
+ij_groovy_space_before_try_left_brace = true
+ij_groovy_space_before_try_parentheses = true
+ij_groovy_space_before_while_keyword = true
+ij_groovy_space_before_while_left_brace = true
+ij_groovy_space_before_while_parentheses = true
+ij_groovy_space_in_named_argument = true
+ij_groovy_space_in_named_argument_before_colon = false
+ij_groovy_space_within_empty_array_initializer_braces = false
+ij_groovy_space_within_empty_method_call_parentheses = false
+ij_groovy_spaces_around_additive_operators = true
+ij_groovy_spaces_around_assignment_operators = true
+ij_groovy_spaces_around_bitwise_operators = true
+ij_groovy_spaces_around_equality_operators = true
+ij_groovy_spaces_around_lambda_arrow = true
+ij_groovy_spaces_around_logical_operators = true
+ij_groovy_spaces_around_multiplicative_operators = true
+ij_groovy_spaces_around_regex_operators = true
+ij_groovy_spaces_around_relational_operators = true
+ij_groovy_spaces_around_shift_operators = true
+ij_groovy_spaces_within_annotation_parentheses = false
+ij_groovy_spaces_within_array_initializer_braces = false
+ij_groovy_spaces_within_braces = true
+ij_groovy_spaces_within_brackets = false
+ij_groovy_spaces_within_cast_parentheses = false
+ij_groovy_spaces_within_catch_parentheses = false
+ij_groovy_spaces_within_for_parentheses = false
+ij_groovy_spaces_within_gstring_injection_braces = false
+ij_groovy_spaces_within_if_parentheses = false
+ij_groovy_spaces_within_list_or_map = false
+ij_groovy_spaces_within_method_call_parentheses = false
+ij_groovy_spaces_within_method_parentheses = false
+ij_groovy_spaces_within_parentheses = false
+ij_groovy_spaces_within_switch_parentheses = false
+ij_groovy_spaces_within_synchronized_parentheses = false
+ij_groovy_spaces_within_try_parentheses = false
+ij_groovy_spaces_within_tuple_expression = false
+ij_groovy_spaces_within_while_parentheses = false
+ij_groovy_special_else_if_treatment = true
+ij_groovy_ternary_operation_wrap = off
+ij_groovy_throws_keyword_wrap = off
+ij_groovy_throws_list_wrap = off
+ij_groovy_use_flying_geese_braces = false
+ij_groovy_use_fq_class_names = false
+ij_groovy_use_fq_class_names_in_javadoc = true
+ij_groovy_use_relative_indents = false
+ij_groovy_use_single_class_imports = true
+ij_groovy_variable_annotation_wrap = off
+ij_groovy_while_brace_force = never
+ij_groovy_while_on_new_line = false
+ij_groovy_wrap_chain_calls_after_dot = false
+ij_groovy_wrap_long_lines = false
+
+[{*.har,*.json,mcmod.info,pack.mcmeta}]
+ij_json_keep_blank_lines_in_code = 0
+ij_json_keep_indents_on_empty_lines = false
+ij_json_keep_line_breaks = true
+ij_json_space_after_colon = true
+ij_json_space_after_comma = true
+ij_json_space_before_colon = true
+ij_json_space_before_comma = false
+ij_json_spaces_within_braces = false
+ij_json_spaces_within_brackets = false
+ij_json_wrap_long_lines = false
+
+[{*.htm,*.html,*.sht,*.shtm,*.shtml}]
+ij_html_add_new_line_before_tags = body, div, p, form, h1, h2, h3
+ij_html_align_attributes = true
+ij_html_align_text = false
+ij_html_attribute_wrap = normal
+ij_html_block_comment_add_space = false
+ij_html_block_comment_at_first_column = true
+ij_html_do_not_align_children_of_min_lines = 0
+ij_html_do_not_break_if_inline_tags = title, h1, h2, h3, h4, h5, h6, p
+ij_html_do_not_indent_children_of_tags = html, body, thead, tbody, tfoot
+ij_html_enforce_quotes = false
+ij_html_inline_tags = a, abbr, acronym, b, basefont, bdo, big, br, cite, cite, code, dfn, em, font, i, img, input, kbd, label, q, s, samp, select, small, span, strike, strong, sub, sup, textarea, tt, u, var
+ij_html_keep_blank_lines = 2
+ij_html_keep_indents_on_empty_lines = false
+ij_html_keep_line_breaks = true
+ij_html_keep_line_breaks_in_text = true
+ij_html_keep_whitespaces = false
+ij_html_keep_whitespaces_inside = span, pre, textarea
+ij_html_line_comment_at_first_column = true
+ij_html_new_line_after_last_attribute = never
+ij_html_new_line_before_first_attribute = never
+ij_html_quote_style = double
+ij_html_remove_new_line_before_tags = br
+ij_html_space_after_tag_name = false
+ij_html_space_around_equality_in_attribute = false
+ij_html_space_inside_empty_tag = false
+ij_html_text_wrap = normal
+
+[{*.kt,*.kts}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_kotlin_align_in_columns_case_branch = false
+ij_kotlin_align_multiline_binary_operation = false
+ij_kotlin_align_multiline_extends_list = false
+ij_kotlin_align_multiline_method_parentheses = false
+ij_kotlin_align_multiline_parameters = true
+ij_kotlin_align_multiline_parameters_in_calls = false
+ij_kotlin_allow_trailing_comma = false
+ij_kotlin_allow_trailing_comma_on_call_site = false
+ij_kotlin_assignment_wrap = normal
+ij_kotlin_blank_lines_after_class_header = 0
+ij_kotlin_blank_lines_around_block_when_branches = 0
+ij_kotlin_blank_lines_before_declaration_with_comment_or_annotation_on_separate_line = 1
+ij_kotlin_block_comment_add_space = false
+ij_kotlin_block_comment_at_first_column = true
+ij_kotlin_call_parameters_new_line_after_left_paren = true
+ij_kotlin_call_parameters_right_paren_on_new_line = true
+ij_kotlin_call_parameters_wrap = on_every_item
+ij_kotlin_catch_on_new_line = false
+ij_kotlin_class_annotation_wrap = split_into_lines
+ij_kotlin_code_style_defaults = KOTLIN_OFFICIAL
+ij_kotlin_continuation_indent_for_chained_calls = false
+ij_kotlin_continuation_indent_for_expression_bodies = false
+ij_kotlin_continuation_indent_in_argument_lists = false
+ij_kotlin_continuation_indent_in_elvis = false
+ij_kotlin_continuation_indent_in_if_conditions = false
+ij_kotlin_continuation_indent_in_parameter_lists = false
+ij_kotlin_continuation_indent_in_supertype_lists = false
+ij_kotlin_else_on_new_line = false
+ij_kotlin_enum_constants_wrap = off
+ij_kotlin_extends_list_wrap = normal
+ij_kotlin_field_annotation_wrap = split_into_lines
+ij_kotlin_finally_on_new_line = false
+ij_kotlin_if_rparen_on_new_line = true
+ij_kotlin_import_nested_classes = false
+ij_kotlin_imports_layout = *, java.**, javax.**, kotlin.**, ^
+ij_kotlin_insert_whitespaces_in_simple_one_line_method = true
+ij_kotlin_keep_blank_lines_before_right_brace = 2
+ij_kotlin_keep_blank_lines_in_code = 2
+ij_kotlin_keep_blank_lines_in_declarations = 2
+ij_kotlin_keep_first_column_comment = true
+ij_kotlin_keep_indents_on_empty_lines = false
+ij_kotlin_keep_line_breaks = true
+ij_kotlin_lbrace_on_next_line = false
+ij_kotlin_line_comment_add_space = false
+ij_kotlin_line_comment_at_first_column = true
+ij_kotlin_method_annotation_wrap = split_into_lines
+ij_kotlin_method_call_chain_wrap = normal
+ij_kotlin_method_parameters_new_line_after_left_paren = true
+ij_kotlin_method_parameters_right_paren_on_new_line = true
+ij_kotlin_method_parameters_wrap = on_every_item
+ij_kotlin_name_count_to_use_star_import = 5
+ij_kotlin_name_count_to_use_star_import_for_members = 3
+ij_kotlin_packages_to_use_import_on_demand = java.util.*, kotlinx.android.synthetic.**, io.ktor.**
+ij_kotlin_parameter_annotation_wrap = off
+ij_kotlin_space_after_comma = true
+ij_kotlin_space_after_extend_colon = true
+ij_kotlin_space_after_type_colon = true
+ij_kotlin_space_before_catch_parentheses = true
+ij_kotlin_space_before_comma = false
+ij_kotlin_space_before_extend_colon = true
+ij_kotlin_space_before_for_parentheses = true
+ij_kotlin_space_before_if_parentheses = true
+ij_kotlin_space_before_lambda_arrow = true
+ij_kotlin_space_before_type_colon = false
+ij_kotlin_space_before_when_parentheses = true
+ij_kotlin_space_before_while_parentheses = true
+ij_kotlin_spaces_around_additive_operators = true
+ij_kotlin_spaces_around_assignment_operators = true
+ij_kotlin_spaces_around_equality_operators = true
+ij_kotlin_spaces_around_function_type_arrow = true
+ij_kotlin_spaces_around_logical_operators = true
+ij_kotlin_spaces_around_multiplicative_operators = true
+ij_kotlin_spaces_around_range = false
+ij_kotlin_spaces_around_relational_operators = true
+ij_kotlin_spaces_around_unary_operator = false
+ij_kotlin_spaces_around_when_arrow = true
+ij_kotlin_variable_annotation_wrap = off
+ij_kotlin_while_on_new_line = false
+ij_kotlin_wrap_elvis_expressions = 1
+ij_kotlin_wrap_expression_body_functions = 1
+ij_kotlin_wrap_first_method_in_call_chain = false
+
+[{*.markdown,*.md,CONTRIBUTE}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_markdown_force_one_space_after_blockquote_symbol = true
+ij_markdown_force_one_space_after_header_symbol = true
+ij_markdown_force_one_space_after_list_bullet = true
+ij_markdown_force_one_space_between_words = true
+ij_markdown_keep_indents_on_empty_lines = false
+ij_markdown_max_lines_around_block_elements = 1
+ij_markdown_max_lines_around_header = 1
+ij_markdown_max_lines_between_paragraphs = 1
+ij_markdown_min_lines_around_block_elements = 1
+ij_markdown_min_lines_around_header = 1
+ij_markdown_min_lines_between_paragraphs = 1
+
+[{*.toml,Cargo.lock,Cargo.toml.orig,Gopkg.lock,Pipfile,poetry.lock}]
+indent_size = 4
+tab_width = 4
+ij_continuation_indent_size = 8
+ij_toml_keep_indents_on_empty_lines = false
+
+[{*.yaml,*.yml}]
+ij_yaml_align_values_properties = do_not_align
+ij_yaml_autoinsert_sequence_marker = true
+ij_yaml_block_mapping_on_new_line = false
+ij_yaml_indent_sequence_value = true
+ij_yaml_keep_indents_on_empty_lines = false
+ij_yaml_keep_line_breaks = true
+ij_yaml_sequence_on_new_line = false
+ij_yaml_space_before_colon = false
+ij_yaml_spaces_within_braces = true
+ij_yaml_spaces_within_brackets = true
diff --git a/.gitignore b/.gitignore
index 744289d..937761b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,134 @@
-# Project exclude paths
-/target/
\ No newline at end of file
+### .gitignore generated by ".ignore File" plugin
+# Template contains ignored files of Java, Maven, IntelliJ, Eclipse, Linux, Windows, macOS
+# Manully removed cases that are not needed.
+
+# IntelliJ project files
+.idea
+*.iml
+out
+gen
+
+### Maven template
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+pom.xml.next
+release.properties
+dependency-reduced-pom.xml
+buildNumber.properties
+.mvn/timing.properties
+# https://github.com/takari/maven-wrapper#usage-without-binary-jar
+.mvn/wrapper/maven-wrapper.jar
+
+### Eclipse template
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.settings/
+.loadpath
+.recommenders
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# Uncomment this line if you wish to ignore the project description file.
+# Typically, this file would be tracked if it contains build/dependency configurations:
+.project
+
+### Java template
+# Compiled class file
+*.class
+
+# Log file
+*.log
+
+# Package Files #
+*.jar
+*.war
+*.nar
+*.ear
+*.zip
+*.tar.gz
+*.rar
+
+# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
+hs_err_pid*
+
+### Linux template
+*~
+
+# temporary files which can be created if a process still has a handle open of a deleted file
+.fuse_hidden*
+
+# KDE directory preferences
+.directory
+
+# Linux trash folder which might appear on any partition or disk
+.Trash-*
+
+# .nfs files are created when an open file is removed but is still being accessed
+.nfs*
+
+### Windows template
+# Windows thumbnail cache files
+Thumbs.db
+Thumbs.db:encryptable
+ehthumbs.db
+ehthumbs_vista.db
+
+# Dump file
+*.stackdump
+
+# Folder config file
+[Dd]esktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Windows Installer files
+*.cab
+*.msi
+*.msix
+*.msm
+*.msp
+
+# Windows shortcuts
+*.lnk
+
+### macOS template
+# General
+.DS_Store
+.AppleDouble
+.LSOverride
+
+# Icon must end with two \r
+Icon
+
+# Thumbnails
+._*
+
+# Files that might appear in the root of a volume
+.DocumentRevisions-V100
+.fseventsd
+.Spotlight-V100
+.TemporaryItems
+.Trashes
+.VolumeIcon.icns
+.com.apple.timemachine.donotpresent
+
+# Directories potentially created on remote AFP share
+.AppleDB
+.AppleDesktop
+Network Trash Folder
+Temporary Items
+.apdisk
+
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..a0fdc19
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
deleted file mode 100644
index 0e66824..0000000
--- a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_1_3_9.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml b/.idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml
deleted file mode 100644
index 6e5d5b7..0000000
--- a/.idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_guava_guava_21_0.xml b/.idea/libraries/Maven__com_google_guava_guava_21_0.xml
deleted file mode 100644
index a923456..0000000
--- a/.idea/libraries/Maven__com_google_guava_guava_21_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml
deleted file mode 100644
index f3f3738..0000000
--- a/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml b/.idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml
new file mode 100644
index 0000000..425700e
--- /dev/null
+++ b/.idea/libraries/Maven__com_ibm_icu_icu4j_61_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_commandbook_2_3.xml b/.idea/libraries/Maven__com_sk89q_commandbook_2_3.xml
deleted file mode 100644
index 589fb53..0000000
--- a/.idea/libraries/Maven__com_sk89q_commandbook_2_3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_intake_intake_4_2_SNAPSHOT.xml b/.idea/libraries/Maven__com_sk89q_intake_intake_4_2_SNAPSHOT.xml
deleted file mode 100644
index 8a4cdb0..0000000
--- a/.idea/libraries/Maven__com_sk89q_intake_intake_4_2_SNAPSHOT.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_squirrelid_0_2_0.xml b/.idea/libraries/Maven__com_sk89q_squirrelid_0_2_0.xml
deleted file mode 100644
index 7e8d00a..0000000
--- a/.idea/libraries/Maven__com_sk89q_squirrelid_0_2_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_bukkit_7_0_0_SNAPSHOT.xml b/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_bukkit_7_0_0_SNAPSHOT.xml
deleted file mode 100644
index 19767c5..0000000
--- a/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_bukkit_7_0_0_SNAPSHOT.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_bukkit_7_2_6_SNAPSHOT.xml b/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_bukkit_7_2_6_SNAPSHOT.xml
new file mode 100644
index 0000000..87773e8
--- /dev/null
+++ b/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_bukkit_7_2_6_SNAPSHOT.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_core_7_0_0_SNAPSHOT.xml b/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_core_7_2_6_SNAPSHOT.xml
similarity index 52%
rename from .idea/libraries/Maven__com_sk89q_worldedit_worldedit_core_7_0_0_SNAPSHOT.xml
rename to .idea/libraries/Maven__com_sk89q_worldedit_worldedit_core_7_2_6_SNAPSHOT.xml
index e4f342d..f5a5e53 100644
--- a/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_core_7_0_0_SNAPSHOT.xml
+++ b/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_core_7_2_6_SNAPSHOT.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_libs_bukkit_7_0_0_SNAPSHOT.xml b/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_libs_bukkit_7_0_0_SNAPSHOT.xml
deleted file mode 100644
index ea19676..0000000
--- a/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_libs_bukkit_7_0_0_SNAPSHOT.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_libs_core_7_0_0_SNAPSHOT.xml b/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_libs_core_7_2_6_SNAPSHOT.xml
similarity index 67%
rename from .idea/libraries/Maven__com_sk89q_worldedit_worldedit_libs_core_7_0_0_SNAPSHOT.xml
rename to .idea/libraries/Maven__com_sk89q_worldedit_worldedit_libs_core_7_2_6_SNAPSHOT.xml
index 9915c11..c06be2e 100644
--- a/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_libs_core_7_0_0_SNAPSHOT.xml
+++ b/.idea/libraries/Maven__com_sk89q_worldedit_worldedit_libs_core_7_2_6_SNAPSHOT.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_bukkit_7_0_0.xml b/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_bukkit_7_0_6.xml
similarity index 67%
rename from .idea/libraries/Maven__com_sk89q_worldguard_worldguard_bukkit_7_0_0.xml
rename to .idea/libraries/Maven__com_sk89q_worldguard_worldguard_bukkit_7_0_6.xml
index e249fab..65b84f5 100644
--- a/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_bukkit_7_0_0.xml
+++ b/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_bukkit_7_0_6.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_core_7_0_0.xml b/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_core_7_0_6.xml
similarity index 68%
rename from .idea/libraries/Maven__com_sk89q_worldguard_worldguard_core_7_0_0.xml
rename to .idea/libraries/Maven__com_sk89q_worldguard_worldguard_core_7_0_6.xml
index 57df4ec..bf70a8a 100644
--- a/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_core_7_0_0.xml
+++ b/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_core_7_0_6.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_libs_core_7_0_6.xml b/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_libs_core_7_0_6.xml
new file mode 100644
index 0000000..080b6ad
--- /dev/null
+++ b/.idea/libraries/Maven__com_sk89q_worldguard_worldguard_libs_core_7_0_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__de_schlichtherle_truezip_6_8_3.xml b/.idea/libraries/Maven__de_schlichtherle_truezip_6_8_3.xml
deleted file mode 100644
index 31ae2cd..0000000
--- a/.idea/libraries/Maven__de_schlichtherle_truezip_6_8_3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_unimi_dsi_fastutil_8_2_1.xml b/.idea/libraries/Maven__it_unimi_dsi_fastutil_8_2_1.xml
new file mode 100644
index 0000000..3873e57
--- /dev/null
+++ b/.idea/libraries/Maven__it_unimi_dsi_fastutil_8_2_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_10.xml b/.idea/libraries/Maven__junit_junit_4_10.xml
deleted file mode 100644
index ed8bf5f..0000000
--- a/.idea/libraries/Maven__junit_junit_4_10.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_md_5_bungeecord_chat_1_16_R0_3.xml b/.idea/libraries/Maven__net_md_5_bungeecord_chat_1_16_R0_3.xml
deleted file mode 100644
index 2019f9a..0000000
--- a/.idea/libraries/Maven__net_md_5_bungeecord_chat_1_16_R0_3.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml b/.idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml
new file mode 100644
index 0000000..7add102
--- /dev/null
+++ b/.idea/libraries/Maven__org_abego_treelayout_org_abego_treelayout_core_1_0_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_antlr_ST4_4_3.xml b/.idea/libraries/Maven__org_antlr_ST4_4_3.xml
new file mode 100644
index 0000000..7cc44a6
--- /dev/null
+++ b/.idea/libraries/Maven__org_antlr_ST4_4_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_antlr_antlr4_4_9_1.xml b/.idea/libraries/Maven__org_antlr_antlr4_4_9_1.xml
new file mode 100644
index 0000000..0a8aa63
--- /dev/null
+++ b/.idea/libraries/Maven__org_antlr_antlr4_4_9_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_9_1.xml b/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_9_1.xml
new file mode 100644
index 0000000..28f7bb9
--- /dev/null
+++ b/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_9_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml b/.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml
new file mode 100644
index 0000000..4fc5cbb
--- /dev/null
+++ b/.idea/libraries/Maven__org_antlr_antlr_runtime_3_5_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_8_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_14_1.xml
similarity index 59%
rename from .idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_8_1.xml
rename to .idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_14_1.xml
index ff9feed..700b41b 100644
--- a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_8_1.xml
+++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_14_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_8_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_8_1.xml
deleted file mode 100644
index 7658b06..0000000
--- a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j_impl_2_8_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_bstats_bstats_bukkit_1_4.xml b/.idea/libraries/Maven__org_bstats_bstats_bukkit_1_4.xml
deleted file mode 100644
index e5d05de..0000000
--- a/.idea/libraries/Maven__org_bstats_bstats_bukkit_1_4.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_bukkit_bukkit_1_13_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_bukkit_bukkit_1_13_R0_1_SNAPSHOT.xml
deleted file mode 100644
index 83cb176..0000000
--- a/.idea/libraries/Maven__org_bukkit_bukkit_1_13_R0_1_SNAPSHOT.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml b/.idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml
new file mode 100644
index 0000000..7fbea5f
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_javax_json_1_0_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml
deleted file mode 100644
index acdf443..0000000
--- a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_khelekore_prtree_1_5_0.xml b/.idea/libraries/Maven__org_khelekore_prtree_1_5_0.xml
deleted file mode 100644
index 4b8f0e6..0000000
--- a/.idea/libraries/Maven__org_khelekore_prtree_1_5_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_mozilla_rhino_runtime_1_7_13.xml b/.idea/libraries/Maven__org_mozilla_rhino_runtime_1_7_13.xml
new file mode 100644
index 0000000..9305f59
--- /dev/null
+++ b/.idea/libraries/Maven__org_mozilla_rhino_runtime_1_7_13.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_26.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_26.xml
deleted file mode 100644
index 6545f77..0000000
--- a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_26.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_spigotmc_spigot_api_1_16_1_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_spigotmc_spigot_api_1_16_1_R0_1_SNAPSHOT.xml
deleted file mode 100644
index 9b24410..0000000
--- a/.idea/libraries/Maven__org_spigotmc_spigot_api_1_16_1_R0_1_SNAPSHOT.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_26.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_26.xml
deleted file mode 100644
index e998675..0000000
--- a/.idea/libraries/Maven__org_yaml_snakeyaml_1_26.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__rhino_js_1_7R2.xml b/.idea/libraries/Maven__rhino_js_1_7R2.xml
deleted file mode 100644
index 73d4473..0000000
--- a/.idea/libraries/Maven__rhino_js_1_7R2.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 9dd240e..1518e28 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -12,7 +12,7 @@
-
+
\ No newline at end of file
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 0000000..1adb32a
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,58 @@
+# Contributing
+
+## Issues
+
+Found an issue? Great, you can report bugs and crashes by opening an issue on
+our [issue tracker](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/issues). Before opening a
+new issue, use the search tool to make sure that your issue has not already been reported and ensure
+that you have completely filled out the issue template. Issues that are duplicates or do not contain
+the necessary information to triage and debug may be closed.
+
+Please provide the following details in your issue:
+
+* The exact version of the plugin you are running and the server version you are using.
+* If your issue is a crash, attach the latest log which include the crash you are referencing to.
+* If your issue is a bug or otherwise unexpected behavior, explain what you expected to happen.
+* If your issue only occurs with other plugins installed, be sure to specify the names and versions
+ of those.
+
+## Balancing
+
+Want to contribute balancing changes to the default config? Great, please open an issue and let us
+know about your changes. We will be happy to integrate them.
+
+## Translation
+
+You want to translate FreeRPG to a different language? Great, clone this repository or download the
+[languages.yml](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/blob/master/src/main/resources/languages.yml)
+file. Open it using a texteditor or an IDE. Start by coping for example the english translation (
+check out the
+[link](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/blob/2301f9fbbea164e581973130d62509f891cb0103/src/main/resources/languages.yml#L4-L634)
+for the marked section of a file that needs to be copied for a full translation) to the bottom of
+the file. Replace `enUS:` by your country and start translating the values of the key. A key value
+pair is defined by `variableName: Variable Name` for example `languageName: English`, `languageName`
+is the variable name and `English` is the translation. In other words you always need to replace the
+words next to the variable name with your translation.
+
+## Adding Blocks and Entities from newer Minecraft versions to FreeRPG
+
+Most new blocks, items and entities can be simply added by adding them to the different
+configuration files. Afterwards some changes need to be done to the source code to actually apply
+some of these changes. Check out these two
+commits ([2455c8c](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/commit/2455c8c45134a0cd2392e096fd17ac357ee8c35c)
+, [21cda30](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/commit/21cda30e69d3b567a295c2ba9b07098de1dc0540))
+to get a rough understanding where and how to add them.
+
+## Source code
+
+Want to contribute changes to the source code? Set up your development environment as described in
+the [spigot wiki](https://www.spigotmc.org/wiki/spigot-plugin-development/). Please make sure your
+changes are following .editorconfig style, let your IDE format your changes to ensure that. Open a
+pull request with your changes, and we will happily integrate them.
+
+### Tasks to be done
+
+- [ ] Clean up code
+- [ ] Reduce code duplication
+- [ ] Simplify methods, so code is more readable
+
diff --git a/FreeRPG_1.16.iml b/FreeRPG_1.16.iml
index cd5bd64..c4e54fe 100644
--- a/FreeRPG_1.16.iml
+++ b/FreeRPG_1.16.iml
@@ -21,34 +21,35 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..74900e4
--- /dev/null
+++ b/README.md
@@ -0,0 +1,122 @@
+# FreeRPG
+
+
+
+
+
+This is a fork of the Spigot plugin with the equivalent name, for which further development was discontinued. FreeRPG is a spigot 1.15+ plugin that adds an RPG skill system to Minecraft. Inspired by Mcmmo, the
+goal is to offer a free Mcmmo alternative. Each skill has a skill tree, with an additional global
+skill tree. The skill trees can be accessed with a very simplistic, Hypixel inspired GUI.
+
+## Download
+
+* [Download on Modrinth](https://modrinth.com/plugin/freerpg)
+* [Download on Github Releases](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/releases)
+
+## Getting Started
+
+
+
+To get started playing, type ``/frpg``. This will bring up the GUI seen in the screenshot above.
+Clicking on any of the icons will take you to that skill's skill tree. Hovering over any of the
+icons or clicking on them will tell you more about the perk as shown in the screenshot below.
+
+
+
+Earning experience is straightforward, mine blocks to get mining experience, cut trees to get woodcutting
+experience, etc.
+
+By the default configuration, each level you finish, will gain **1 passive token** which can be
+invested in the passive skills represented by the dyes on the left. Every 100 levels, you will
+gain **1 skill token** which can be invested in the skills represented by the terracotta skill tree.
+Every 1000 levels, you will gain **1 global token** that can be used in the global skill tree.
+Please check the wiki, for further information on how to configure FreeRPG to your needs.
+
+FreeRPG provides 10 abilities to the player which can be leveled.
+
+| Name | Related Skill | Description | Activation | Duration by default |
+|--------------------------|---------------|---------------------------------------------------------------------------------|----------------------------------------------------------------------------|---------------------|
+| **Big Dig** | Digging | Increases dig speed drastically. | Right-clicking a shovel, then breaking a block. | 300 sec |
+| **Timber** | Woodcutting | Will cause all logs above to break. | Right-clicking a pickaxe, then breaking a block. | 300 sec |
+| **Berserk Pick** | Mining | Will increase mining speed drastically. | Right-clicking a pickaxe, then breaking a block. | 300 sec |
+| **Natural Regeneration** | Farming | Automatically replants all crops at a random growth stage. | Right-clicking a hoe, then breaking a crop. | 300 sec |
+| **Super Bait** | Fishing | Fish are instantly pulled out of the water, without waiting to get a bite. | Left-clicking a fishing rod, then fishing. | 300 sec |
+| **Rapid Fire** | Archery | Arrow shots come out at maximum speed no matter how far the bow is pulled back. | Left-clicking a bow. | 300 sec |
+| **Spur Kick** | Beast Mastery | Grants your horse a temporary speed boost. | Right-clicking most items while on a horse, then left-clicking most items. | 300 sec |
+| **Swift Strikes** | Swordsmanship | Your swings no longer have a cooldown. | Right-clicking a sword then hitting an entity. | 300 sec |
+| **Stone Solid** | Defense | Grants resistance at the cost of being slowed down. | Right-clicking with an empty hand, then hitting an entity. | 300 sec |
+| **Great Axe** | Axe Mastery | Your attacks become an AOE strike that deals damage in a certain radius. | Right-clicking an axe, then hitting an entity. | 300 sec |
+
+For further features and information on configuration, permissions and usage check out
+the [wiki](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/wiki).
+
+## Language Support
+
+FreeRPG fully/partially supports the following languages by default:
+
+- 🇺🇸 English
+- 🇭🇺 Hungarian (Translated by: vERKE)
+- 🇫🇷 French (Translated by: Temuel)
+- 🇩🇪 German (Translated by: KlenerTeufel96 of FruitLab.gg)
+- 🇵🇱 Polish (Translated by: QuarVey)
+- 🇪🇸 Spanish (Translated by: PibeChileno)
+- 🇷🇺 Russian (Translated by: Cr1stalz_, MoKotik, and DevilPlay)
+- 🇵🇹 Portuguese (Translated by: gbuueno)
+- 🇨🇿 Czech (Translated by: Pieck444 and Fractvival)
+- 🇰🇷 Korean (Translated by: Re_Oh)
+
+The default server language can be set in config.yml. Additionally, each player can pick which
+language they want the plugin to be represented in. Server administrators can add their own
+languages to languages.yml. If you want to add your translation to be hardcoded into languages.yml,
+please open a pull request with the added language. For further information check the [CONTRIBUTING](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/blob/master/CONTRIBUTING.md) file in this repository
+
+## Wiki
+
+The [wiki](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/wiki) provides you with detailed information about the abilities, skill trees and plugin configuration.
+
+## Compatibility
+
+FreeRPG should be compatible with most popular plugins. It has been tested with Essentials,
+Bssentials, World Edit, Worldguard, Silk Spawners, and PlaceholderAPI and yielded no issues. It has
+additionally, been tested with Multiverse and has no major issues. However, player profiles for
+different worlds are not possible at the moment.
+
+## Links
+
+* [Wiki](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/wiki)
+* [Modrinth](https://modrinth.com/plugin/freerpg)
+* [Github](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16)
+
+## Contribute
+
+You want to contribute to this plugin by providing a translation, balancing changes or source code
+changes? Great, please check the [CONTRIBUTING](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/blob/master/CONTRIBUTING.md)
+file in this repository for further information.
+
+### Reporting Issues
+
+You can report bugs, crashes or any other issue you found by opening a new issue on
+our [issue tracker](https://github.com/AdvancedWipe/Minecraft_FreeRPG_1.16/issues). Before opening a
+new issue, use the search tool to make sure that your issue has not already been reported and ensure
+that you have completely filled out the issue template.
+
+Please provide the following details in your issue:
+
+* The exact version of the plugin you are running and the server version you are using.
+* If your issue is a crash, attach the latest log which include the crash you are referencing to.
+* If your issue is a bug or otherwise unexpected behavior, explain what you expected to happen.
+* If your issue only occurs with other plugins installed, be sure to specify the names and versions
+ of those.
+
+## Licence
+
+FreeRPG is licensed under MIT license, a free and open-source license. For more information, please
+see the [license](LICENSE) file.
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index c0a39e1..a9e23e2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,96 +1,96 @@
-
- 4.0.0
+
+ freerpg
- mc.carlton
- freerpg
- 1.4.49
- jar
+
+ clean package
+
+
+ maven-compiler-plugin
+
+ ${java.version}
+ ${java.version}
+
+ org.apache.maven.plugins
+ 3.7.0
+
+
+ maven-shade-plugin
+
+
+
+ false
+
+
+ shade
+
+ package
+
+
+ org.apache.maven.plugins
+ 3.1.0
+
+
+
+
+ src/main/resources
+ true
+
+
+
+
+
+ spigot-api
+ org.spigotmc
+ provided
+ 1.18.1-R0.1-SNAPSHOT
+
+
+ worldguard-bukkit
+ com.sk89q.worldguard
+ provided
+ 7.0.6
+
+
+ placeholderapi
+ me.clip
+ provided
+ 2.10.9
+
+
+ Minecraft 1.15-1.16 RPG Plugin
+ mc.carlton
- FreeRPG
+ 4.0.0
- Minecraft 1.15-1.16 RPG Plugin
-
- 1.8
- UTF-8
-
+ FreeRPG
+ jar
-
- clean package
-
-
- org.apache.maven.plugins
- maven-compiler-plugin
- 3.7.0
-
- ${java.version}
- ${java.version}
-
-
-
- org.apache.maven.plugins
- maven-shade-plugin
- 3.1.0
-
-
- package
-
- shade
-
-
- false
-
-
-
-
-
-
-
- src/main/resources
- true
-
-
-
+
+ 1.8
+ UTF-8
+
-
-
- spigotmc-repo
- https://hub.spigotmc.org/nexus/content/repositories/snapshots/
-
-
- sonatype
- https://oss.sonatype.org/content/groups/public/
-
-
- sk89q-repo
- https://maven.enginehub.org/repo/
-
-
- placeholderapi
- https://repo.extendedclip.com/content/repositories/placeholderapi/
-
-
+
+
+ spigotmc-repo
+ https://hub.spigotmc.org/nexus/content/repositories/snapshots/
+
+
+ sonatype
+ https://oss.sonatype.org/content/groups/public/
+
+
+ sk89q-repo
+ https://maven.enginehub.org/repo/
+
+
+ placeholderapi
+ https://repo.extendedclip.com/content/repositories/placeholderapi/
+
+
-
-
- org.spigotmc
- spigot-api
- 1.16.1-R0.1-SNAPSHOT
- provided
-
-
- com.sk89q.worldguard
- worldguard-bukkit
- 7.0.0
- provided
-
-
- me.clip
- placeholderapi
- 2.10.9
- provided
-
-
+ 1.4.52
diff --git a/src/main/java/mc/carlton/freerpg/FreeRPG.java b/src/main/java/mc/carlton/freerpg/FreeRPG.java
index 26e8bd5..d8401e8 100644
--- a/src/main/java/mc/carlton/freerpg/FreeRPG.java
+++ b/src/main/java/mc/carlton/freerpg/FreeRPG.java
@@ -1,36 +1,93 @@
package mc.carlton.freerpg;
-import mc.carlton.freerpg.brewingEvents.BrewingInventoryClick;
-import mc.carlton.freerpg.brewingEvents.FinishedBrewing;
-import mc.carlton.freerpg.clickEvents.PlayerLeftClick;
-import mc.carlton.freerpg.clickEvents.PlayerLeftClickDeveloper;
-import mc.carlton.freerpg.clickEvents.PlayerRightClick;
-import mc.carlton.freerpg.clickEvents.PlayerRightClickEntity;
-import mc.carlton.freerpg.combatEvents.*;
-import mc.carlton.freerpg.commands.*;
-import mc.carlton.freerpg.customContainers.CustomContainerImporter;
-import mc.carlton.freerpg.customContainers.CustomPotion;
-import mc.carlton.freerpg.customContainers.collections.CustomRecipe;
-import mc.carlton.freerpg.enchantingEvents.*;
-import mc.carlton.freerpg.furnaceEvents.FurnaceBurn;
-import mc.carlton.freerpg.furnaceEvents.FurnaceInventoryClick;
-import mc.carlton.freerpg.furnaceEvents.FurnaceSmelt;
-import mc.carlton.freerpg.globalVariables.*;
-import mc.carlton.freerpg.guiEvents.*;
-import mc.carlton.freerpg.leaveAndJoin.LoginProcedure;
-import mc.carlton.freerpg.leaveAndJoin.LogoutProcedure;
-import mc.carlton.freerpg.miscEvents.*;
-import mc.carlton.freerpg.leaveAndJoin.PlayerJoin;
-import mc.carlton.freerpg.leaveAndJoin.PlayerLeave;
-import mc.carlton.freerpg.newEvents.eventCallers.FrpgAbilityItemMovedEventCaller;
-import mc.carlton.freerpg.newEvents.eventCallers.FrpgPlayerCraftItemEventCaller;
-import mc.carlton.freerpg.newEvents.eventCallers.FrpgPlayerRightClickEventCaller;
-import mc.carlton.freerpg.pistonEvents.PistonEvents;
-import mc.carlton.freerpg.playerInfo.*;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import mc.carlton.freerpg.serverFileManagement.*;
-import mc.carlton.freerpg.serverInfo.*;
-import org.bukkit.*;
+import java.io.File;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import mc.carlton.freerpg.commands.FrpgCommands;
+import mc.carlton.freerpg.commands.SpiteQuote;
+import mc.carlton.freerpg.config.ConfigLoad;
+import mc.carlton.freerpg.core.info.player.Leaderboards;
+import mc.carlton.freerpg.core.info.player.OfflinePlayerStatLoadIn;
+import mc.carlton.freerpg.core.info.server.FreeRPGPlaceHolders;
+import mc.carlton.freerpg.core.info.server.MinecraftVersion;
+import mc.carlton.freerpg.core.info.server.RunTimeData;
+import mc.carlton.freerpg.core.info.server.WorldGuardChecks;
+import mc.carlton.freerpg.core.leaveAndJoin.LoginProcedure;
+import mc.carlton.freerpg.core.leaveAndJoin.LogoutProcedure;
+import mc.carlton.freerpg.core.leaveAndJoin.PlayerJoin;
+import mc.carlton.freerpg.core.leaveAndJoin.PlayerLeave;
+import mc.carlton.freerpg.core.serverFileManagement.LeaderBoardFilesManager;
+import mc.carlton.freerpg.core.serverFileManagement.PeriodicSaving;
+import mc.carlton.freerpg.core.serverFileManagement.PlacedBlockFileManager;
+import mc.carlton.freerpg.core.serverFileManagement.PlayerStatsFilePreparation;
+import mc.carlton.freerpg.core.serverFileManagement.RecentPlayersFileManager;
+import mc.carlton.freerpg.core.serverFileManagement.ServerDataFolderPreparation;
+import mc.carlton.freerpg.core.serverFileManagement.YMLManager;
+import mc.carlton.freerpg.events.brewing.BrewingInventoryClick;
+import mc.carlton.freerpg.events.brewing.FinishedBrewing;
+import mc.carlton.freerpg.events.click.PlayerLeftClick;
+import mc.carlton.freerpg.events.click.PlayerLeftClickDeveloper;
+import mc.carlton.freerpg.events.click.PlayerRightClick;
+import mc.carlton.freerpg.events.click.PlayerRightClickEntity;
+import mc.carlton.freerpg.events.combat.ArrowLand;
+import mc.carlton.freerpg.events.combat.EntityGetDamaged;
+import mc.carlton.freerpg.events.combat.EntityHitEntity;
+import mc.carlton.freerpg.events.combat.LingeringPotionSplash;
+import mc.carlton.freerpg.events.combat.PlayerDeath;
+import mc.carlton.freerpg.events.combat.PlayerKillEntity;
+import mc.carlton.freerpg.events.combat.PlayerShootBow;
+import mc.carlton.freerpg.events.combat.PlayerTakeDamage;
+import mc.carlton.freerpg.events.combat.PotionSplash;
+import mc.carlton.freerpg.events.enchanting.AnvilClick;
+import mc.carlton.freerpg.events.enchanting.ExperienceBottleBreak;
+import mc.carlton.freerpg.events.enchanting.PlayerEnchant;
+import mc.carlton.freerpg.events.enchanting.PlayerGetExperience;
+import mc.carlton.freerpg.events.enchanting.PrepareEnchanting;
+import mc.carlton.freerpg.events.enchanting.PrepareRepair;
+import mc.carlton.freerpg.events.furnace.FurnaceBurn;
+import mc.carlton.freerpg.events.furnace.FurnaceInventoryClick;
+import mc.carlton.freerpg.events.furnace.FurnaceSmelt;
+import mc.carlton.freerpg.events.gui.ConfigurationGUIClick;
+import mc.carlton.freerpg.events.gui.ConfirmationGUIClick;
+import mc.carlton.freerpg.events.gui.CraftingGUIclick;
+import mc.carlton.freerpg.events.gui.MainGUIclick;
+import mc.carlton.freerpg.events.gui.SkillsConfigGUIClick;
+import mc.carlton.freerpg.events.gui.SkillsGUIclick;
+import mc.carlton.freerpg.events.misc.CreatureSpawn;
+import mc.carlton.freerpg.events.misc.DispenserDispenseItem;
+import mc.carlton.freerpg.events.misc.EntityPickUpItem;
+import mc.carlton.freerpg.events.misc.PlayerBlockBreak;
+import mc.carlton.freerpg.events.misc.PlayerBlockBreakDeveloper;
+import mc.carlton.freerpg.events.misc.PlayerBlockPlace;
+import mc.carlton.freerpg.events.misc.PlayerBreedEntity;
+import mc.carlton.freerpg.events.misc.PlayerConsumeItem;
+import mc.carlton.freerpg.events.misc.PlayerCraft;
+import mc.carlton.freerpg.events.misc.PlayerDismount;
+import mc.carlton.freerpg.events.misc.PlayerDropItem;
+import mc.carlton.freerpg.events.misc.PlayerEnterVehicle;
+import mc.carlton.freerpg.events.misc.PlayerFish;
+import mc.carlton.freerpg.events.misc.PlayerMount;
+import mc.carlton.freerpg.events.misc.PlayerMoveAbilityItem;
+import mc.carlton.freerpg.events.misc.PlayerPrepareCrafting;
+import mc.carlton.freerpg.events.misc.PlayerRespawn;
+import mc.carlton.freerpg.events.misc.PlayerShear;
+import mc.carlton.freerpg.events.misc.PlayerToggleSprint;
+import mc.carlton.freerpg.events.misc.TameEntityEvent;
+import mc.carlton.freerpg.events.newEvents.eventCallers.FrpgAbilityItemMovedEventCaller;
+import mc.carlton.freerpg.events.newEvents.eventCallers.FrpgPlayerCraftItemEventCaller;
+import mc.carlton.freerpg.events.newEvents.eventCallers.FrpgPlayerRightClickEventCaller;
+import mc.carlton.freerpg.events.piston.PistonEvents;
+import mc.carlton.freerpg.utils.globalVariables.CraftingRecipes;
+import mc.carlton.freerpg.utils.globalVariables.EntityGroups;
+import mc.carlton.freerpg.utils.globalVariables.ExpMaps;
+import mc.carlton.freerpg.utils.globalVariables.ItemGroups;
+import mc.carlton.freerpg.utils.globalVariables.StringsAndOtherData;
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.bukkit.Bukkit;
+import org.bukkit.NamespacedKey;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
@@ -38,266 +95,268 @@
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
-import java.io.File;
-import java.io.IOException;
-import java.lang.reflect.Field;
-import java.util.HashMap;
-
public final class FreeRPG extends JavaPlugin implements Listener {
- @Override
- public void onEnable() {
- //Plugin startup logic
- Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
-
- //Saves Resources if they aren't there
- getConfig().options().copyDefaults();
- saveDefaultConfig();
- saveResource("languages.yml",false);
- saveResource("advancedConfig.yml",false);
-
-
- //Checks config.yml and languages.yml for updates, and update them if needed (while trying to keep any edits)
- YMLManager ymlManager = new YMLManager();
- ymlManager.updateCheckYML("config.yml");
- ymlManager.updateCheckYML("languages.yml");
- ymlManager.updateCheckYML("advancedConfig.yml");
-
-
-
- //Loads config to into memory
- ConfigLoad loadConfig = new ConfigLoad();
- loadConfig.initializeConfig();
-
- //Makes SeverData Folder
- ServerDataFolderPreparation serverDataFolderPreparation = new ServerDataFolderPreparation();
- serverDataFolderPreparation.initializeServerDataFolder();
-
- //Makes PlayerData Folder
- PlayerStatsFilePreparation playerStatsFilePreparation = new PlayerStatsFilePreparation();
- playerStatsFilePreparation.initializePlayerDataBase();
-
- //Initialize Placed Blocks Map
- PlacedBlockFileManager placedBlockFileManager = new PlacedBlockFileManager();
- placedBlockFileManager.initializePlacedBlocksFile(); //Creates blockLocations.dat if not already made
- placedBlockFileManager.initializePlacedBlocks(); //Imports data from blockLocations.dat into a hashamp
-
- //Initializes RecentLogouts List
- RecentPlayersFileManager recentPlayersFileManager = new RecentPlayersFileManager();
- recentPlayersFileManager.initializeRecentPlayersFile(); //Creates recentPlayers.dat if not already made
- recentPlayersFileManager.initializeRecentPlayers(); //Imports data from recentPlayters.dat to an arrayList in RecentLogouts
-
-
- //Check if the server uses world guard
- WorldGuardChecks CheckWorldGuardExistence = new WorldGuardChecks();
- CheckWorldGuardExistence.initializeWorldGuardPresent();
-
- //Checks if the server has PlaceHolderAPI
- if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
- if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI").isEnabled()) {
- new FreeRPGPlaceHolders(this).register();
- }
- }
-
- //Initializes all "global" variables
- MinecraftVersion minecraftVersion = new MinecraftVersion();
- minecraftVersion.initializeVersion();
- EntityGroups entityGroups = new EntityGroups();
- entityGroups.initializeAllEntityGroups();
- ExpMaps expMaps = new ExpMaps();
- expMaps.initializeAllExpMaps();
- ItemGroups itemGroups = new ItemGroups();
- itemGroups.initializeItemGroups();
- CraftingRecipes craftingRecipes = new CraftingRecipes();
- craftingRecipes.initializeAllCraftingRecipes();
- StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
- stringsAndOtherData.initializeData();
-
- //Initializes Player Leaderboard (and may create a file)
- Leaderboards playerLeaderboard = new Leaderboards();
- LeaderBoardFilesManager leaderBoardFilesManager = new LeaderBoardFilesManager();
- playerLeaderboard.initializeLeaderboards();
- boolean didCreateFile = leaderBoardFilesManager.createLeaderBoardFile(false);
- if (!didCreateFile) {
- leaderBoardFilesManager.readInLeaderBoardFile();
- }
-
- //Initiliazes periodically saving stats
- PeriodicSaving saveStats = new PeriodicSaving();
- saveStats.periodicallySaveStats();
-
- //Events
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.isSaveRunTimeData()) {
- getServer().getPluginManager().registerEvents(new PlayerLeftClick(), this);
- getServer().getPluginManager().registerEvents(new PlayerBlockBreak(), this);
- }
- else{
- getServer().getPluginManager().registerEvents(new PlayerLeftClickDeveloper(), this);
- getServer().getPluginManager().registerEvents(new PlayerBlockBreakDeveloper(), this);
- }
- getServer().getPluginManager().registerEvents(this, this);
- getServer().getPluginManager().registerEvents(new PlayerJoin(), this);
- getServer().getPluginManager().registerEvents(new PlayerLeave(), this);
- getServer().getPluginManager().registerEvents(new MainGUIclick(), this);
- getServer().getPluginManager().registerEvents(new SkillsGUIclick(), this);
- getServer().getPluginManager().registerEvents(new CraftingGUIclick(), this);
- getServer().getPluginManager().registerEvents(new ConfirmationGUIClick(), this);
- getServer().getPluginManager().registerEvents(new ConfigurationGUIClick(), this);
- getServer().getPluginManager().registerEvents(new PlayerBlockPlace(), this);
- getServer().getPluginManager().registerEvents(new PlayerRightClick(), this);
- getServer().getPluginManager().registerEvents(new PlayerTakeDamage(), this);
- getServer().getPluginManager().registerEvents(new PlayerCraft(), this);
- getServer().getPluginManager().registerEvents(new PlayerPrepareCrafting(), this);
- getServer().getPluginManager().registerEvents(new EntityHitEntity(), this);
- getServer().getPluginManager().registerEvents(new PlayerKillEntity(), this);
- getServer().getPluginManager().registerEvents(new PlayerConsumeItem(), this);
- getServer().getPluginManager().registerEvents(new PlayerRightClickEntity(), this);
- getServer().getPluginManager().registerEvents(new PlayerShear(), this);
- getServer().getPluginManager().registerEvents(new PlayerFish(), this);
- getServer().getPluginManager().registerEvents(new PlayerShootBow(), this);
- getServer().getPluginManager().registerEvents(new ArrowLand(), this);
- getServer().getPluginManager().registerEvents(new EntityGetDamaged(), this);
- getServer().getPluginManager().registerEvents(new TameEntityEvent(), this);
- getServer().getPluginManager().registerEvents(new PlayerMount(), this);
- getServer().getPluginManager().registerEvents(new PlayerDismount(), this);
- getServer().getPluginManager().registerEvents(new PlayerBreedEntity(), this);
- getServer().getPluginManager().registerEvents(new PlayerToggleSprint(), this);
- getServer().getPluginManager().registerEvents(new BrewingInventoryClick(), this);
- getServer().getPluginManager().registerEvents(new PotionSplash(), this);
- getServer().getPluginManager().registerEvents(new LingeringPotionSplash(), this);
- getServer().getPluginManager().registerEvents(new FinishedBrewing(), this);
- getServer().getPluginManager().registerEvents(new PlayerGetExperience(), this);
- getServer().getPluginManager().registerEvents(new PrepareEnchanting(), this);
- getServer().getPluginManager().registerEvents(new PrepareRepair(), this);
- getServer().getPluginManager().registerEvents(new AnvilClick(), this);
- getServer().getPluginManager().registerEvents(new PlayerEnchant(), this);
- getServer().getPluginManager().registerEvents(new PlayerDeath(), this);
- getServer().getPluginManager().registerEvents(new FurnaceSmelt(), this);
- getServer().getPluginManager().registerEvents(new FurnaceInventoryClick(), this);
- getServer().getPluginManager().registerEvents(new FurnaceBurn(), this);
- getServer().getPluginManager().registerEvents(new PlayerRespawn(), this);
- getServer().getPluginManager().registerEvents(new PlayerDropItem(), this);
- getServer().getPluginManager().registerEvents(new ExperienceBottleBreak(), this);
- getServer().getPluginManager().registerEvents(new SkillsConfigGUIClick(), this);
- getServer().getPluginManager().registerEvents(new EntityPickUpItem(), this);
- getServer().getPluginManager().registerEvents(new CreatureSpawn(), this);
- getServer().getPluginManager().registerEvents(new DispenserDispenseItem(), this);
- getServer().getPluginManager().registerEvents(new PlayerMoveAbilityItem(), this);
- getServer().getPluginManager().registerEvents(new PlayerEnterVehicle(), this);
- getServer().getPluginManager().registerEvents(new PistonEvents(), this);
- getServer().getPluginManager().registerEvents(new FrpgPlayerCraftItemEventCaller(), this);
- getServer().getPluginManager().registerEvents(new FrpgAbilityItemMovedEventCaller(), this);
- getServer().getPluginManager().registerEvents(new FrpgPlayerRightClickEventCaller(), this);
-
- //Registers commands
- getCommand("frpg").setExecutor(new FrpgCommands());
- getCommand("spite").setExecutor(new SpiteQuote());
-
-
- //If the plugin starts with players online
- for (Player p : Bukkit.getOnlinePlayers()) {
- LoginProcedure login = new LoginProcedure(p);
- login.playerLogin();
- }
-
- //Begin Asynchronous loading of offline player stats
- OfflinePlayerStatLoadIn offlinePlayerStatLoadIn = new OfflinePlayerStatLoadIn();
- offlinePlayerStatLoadIn.loadInOfflinePlayers();
-
- //Check extra stuff on load-up
- //saveResource("perkConfig.yml",false);
- //ymlManager.updateCheckYML("perkConfig.yml");
- //test();
+ private static Logger LOGGER = LogManager.getLogger(FreeRPG.class.getSimpleName());
+
+ public static void log(Level level, String message) {
+ LOGGER.log(level, message);
+ }
+
+ @Override
+ public void onEnable() {
+ log(Level.INFO, "Starting FreeRPG");
+ //Plugin startup logic
+ Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
+
+ //Saves Resources if they aren't there
+ getConfig().options().copyDefaults();
+ saveDefaultConfig();
+ saveResource("languages.yml", false);
+ saveResource("advancedConfig.yml", false);
+
+ //Checks config.yml and languages.yml for updates, and update them if needed (while trying to keep any edits)
+ log(Level.INFO, "Checking for config and language files");
+ YMLManager ymlManager = new YMLManager();
+ ymlManager.updateCheckYML("config.yml");
+ ymlManager.updateCheckYML("languages.yml");
+ ymlManager.updateCheckYML("advancedConfig.yml");
+
+ //Loads config to into memory
+ log(Level.INFO, "Loading configs");
+ ConfigLoad loadConfig = new ConfigLoad();
+ loadConfig.initializeConfig();
+
+ //Makes SeverData Folder
+ ServerDataFolderPreparation serverDataFolderPreparation = new ServerDataFolderPreparation();
+ serverDataFolderPreparation.initializeServerDataFolder();
+
+ //Makes PlayerData Folder
+ PlayerStatsFilePreparation playerStatsFilePreparation = new PlayerStatsFilePreparation();
+ playerStatsFilePreparation.initializePlayerDataBase();
+
+ //Initialize Placed Blocks Map
+ PlacedBlockFileManager placedBlockFileManager = new PlacedBlockFileManager();
+ placedBlockFileManager.initializePlacedBlocksFile(); //Creates blockLocations.dat if not already made
+ placedBlockFileManager.initializePlacedBlocks(); //Imports data from blockLocations.dat into a hashamp
+
+ //Initializes RecentLogouts List
+ RecentPlayersFileManager recentPlayersFileManager = new RecentPlayersFileManager();
+ recentPlayersFileManager.initializeRecentPlayersFile(); //Creates recentPlayers.dat if not already made
+ recentPlayersFileManager.initializeRecentPlayers(); //Imports data from recentPlayters.dat to an arrayList in RecentLogouts
+
+ //Check if the server uses world guard
+ log(Level.INFO, "Checking for APIs");
+ WorldGuardChecks CheckWorldGuardExistence = new WorldGuardChecks();
+ CheckWorldGuardExistence.initializeWorldGuardPresent();
+
+ //Checks if the server has PlaceHolderAPI
+ if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null) {
+ if (Bukkit.getPluginManager().getPlugin("PlaceholderAPI").isEnabled()) {
+ new FreeRPGPlaceHolders(this).register();
+ log(Level.INFO, "PlaceholderAPI is present: true");
+ }
}
- public void test() { //The purpose of this is to just place test code to run when the plugin is enabled or disabled
-
- Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
-
- File f = new File(plugin.getDataFolder(),"perkConfig.yml");
- f.setReadable(true,false);
- f.setWritable(true,false);
- YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
-
- final String testConfigPath = "global.skill-1.level-1.test";
- Object test = config.get(testConfigPath);
- System.out.println(test);
- System.out.println(test.getClass());
- //CustomRecipe customRecipe = new CustomContainerImporter(testConfigPath).getCustomRecipe(test,"TEST");
- //customRecipe.addTranslatedVariants();
- //System.out.println(customRecipe);
- //System.out.println(CustomContainerImporter.convertListedTableRowToMap(test,testConfigPath));
-
+ //Initializes all "global" variables
+ // TODO find a better solution
+ log(Level.INFO, "Initializing FreeRPG");
+ MinecraftVersion minecraftVersion = new MinecraftVersion();
+ minecraftVersion.initializeVersion();
+ EntityGroups entityGroups = new EntityGroups();
+ entityGroups.initializeAllEntityGroups();
+ ExpMaps expMaps = new ExpMaps();
+ expMaps.initializeAllExpMaps();
+ ItemGroups itemGroups = new ItemGroups();
+ itemGroups.initializeItemGroups();
+ CraftingRecipes craftingRecipes = new CraftingRecipes();
+ craftingRecipes.initializeAllCraftingRecipes();
+ StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
+ stringsAndOtherData.initializeData();
+
+ //Initializes Player Leaderboard (and may create a file)
+ Leaderboards playerLeaderboard = new Leaderboards();
+ LeaderBoardFilesManager leaderBoardFilesManager = new LeaderBoardFilesManager();
+ playerLeaderboard.initializeLeaderboards();
+ boolean didCreateFile = leaderBoardFilesManager.createLeaderBoardFile(false);
+ if (!didCreateFile) {
+ leaderBoardFilesManager.readInLeaderBoardFile();
}
- public void onDisable() {
-
- //Does everything that would normally be done if a player were to log out
- for (Player p : Bukkit.getOnlinePlayers()) {
- LogoutProcedure logout = new LogoutProcedure(p);
- try {
- logout.playerLogout(true);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- PlacedBlockFileManager saveBlocks = new PlacedBlockFileManager();
- saveBlocks.writePlacedBlocks();
- RecentPlayersFileManager recentPlayersFileManager = new RecentPlayersFileManager();
- recentPlayersFileManager.writeRecentPlayers();
- LeaderBoardFilesManager leaderBoardFilesManager = new LeaderBoardFilesManager();
- leaderBoardFilesManager.writeOutPlayerLeaderBoardFile();
-
- ConfigLoad configLoad = new ConfigLoad();
- if (configLoad.isSaveRunTimeData()) {
- RunTimeData runTimeData = new RunTimeData();
- runTimeData.logRunTimeData();
- }
+ //Initializes periodically saving stats
+ PeriodicSaving saveStats = new PeriodicSaving();
+ saveStats.periodicallySaveStats();
+
+ //Register Events
+ ConfigLoad configLoad = new ConfigLoad();
+ if (!configLoad.isSaveRunTimeData()) {
+ getServer().getPluginManager().registerEvents(new PlayerLeftClick(), this);
+ getServer().getPluginManager().registerEvents(new PlayerBlockBreak(), this);
+ } else {
+ getServer().getPluginManager().registerEvents(new PlayerLeftClickDeveloper(), this);
+ getServer().getPluginManager().registerEvents(new PlayerBlockBreakDeveloper(), this);
+ }
+ getServer().getPluginManager().registerEvents(this, this);
+ getServer().getPluginManager().registerEvents(new PlayerJoin(), this);
+ getServer().getPluginManager().registerEvents(new PlayerLeave(), this);
+ getServer().getPluginManager().registerEvents(new MainGUIclick(), this);
+ getServer().getPluginManager().registerEvents(new SkillsGUIclick(), this);
+ getServer().getPluginManager().registerEvents(new CraftingGUIclick(), this);
+ getServer().getPluginManager().registerEvents(new ConfirmationGUIClick(), this);
+ getServer().getPluginManager().registerEvents(new ConfigurationGUIClick(), this);
+ getServer().getPluginManager().registerEvents(new PlayerBlockPlace(), this);
+ getServer().getPluginManager().registerEvents(new PlayerRightClick(), this);
+ getServer().getPluginManager().registerEvents(new PlayerTakeDamage(), this);
+ getServer().getPluginManager().registerEvents(new PlayerCraft(), this);
+ getServer().getPluginManager().registerEvents(new PlayerPrepareCrafting(), this);
+ getServer().getPluginManager().registerEvents(new EntityHitEntity(), this);
+ getServer().getPluginManager().registerEvents(new PlayerKillEntity(), this);
+ getServer().getPluginManager().registerEvents(new PlayerConsumeItem(), this);
+ getServer().getPluginManager().registerEvents(new PlayerRightClickEntity(), this);
+ getServer().getPluginManager().registerEvents(new PlayerShear(), this);
+ getServer().getPluginManager().registerEvents(new PlayerFish(), this);
+ getServer().getPluginManager().registerEvents(new PlayerShootBow(), this);
+ getServer().getPluginManager().registerEvents(new ArrowLand(), this);
+ getServer().getPluginManager().registerEvents(new EntityGetDamaged(), this);
+ getServer().getPluginManager().registerEvents(new TameEntityEvent(), this);
+ getServer().getPluginManager().registerEvents(new PlayerMount(), this);
+ getServer().getPluginManager().registerEvents(new PlayerDismount(), this);
+ getServer().getPluginManager().registerEvents(new PlayerBreedEntity(), this);
+ getServer().getPluginManager().registerEvents(new PlayerToggleSprint(), this);
+ getServer().getPluginManager().registerEvents(new BrewingInventoryClick(), this);
+ getServer().getPluginManager().registerEvents(new PotionSplash(), this);
+ getServer().getPluginManager().registerEvents(new LingeringPotionSplash(), this);
+ getServer().getPluginManager().registerEvents(new FinishedBrewing(), this);
+ getServer().getPluginManager().registerEvents(new PlayerGetExperience(), this);
+ getServer().getPluginManager().registerEvents(new PrepareEnchanting(), this);
+ getServer().getPluginManager().registerEvents(new PrepareRepair(), this);
+ getServer().getPluginManager().registerEvents(new AnvilClick(), this);
+ getServer().getPluginManager().registerEvents(new PlayerEnchant(), this);
+ getServer().getPluginManager().registerEvents(new PlayerDeath(), this);
+ getServer().getPluginManager().registerEvents(new FurnaceSmelt(), this);
+ getServer().getPluginManager().registerEvents(new FurnaceInventoryClick(), this);
+ getServer().getPluginManager().registerEvents(new FurnaceBurn(), this);
+ getServer().getPluginManager().registerEvents(new PlayerRespawn(), this);
+ getServer().getPluginManager().registerEvents(new PlayerDropItem(), this);
+ getServer().getPluginManager().registerEvents(new ExperienceBottleBreak(), this);
+ getServer().getPluginManager().registerEvents(new SkillsConfigGUIClick(), this);
+ getServer().getPluginManager().registerEvents(new EntityPickUpItem(), this);
+ getServer().getPluginManager().registerEvents(new CreatureSpawn(), this);
+ getServer().getPluginManager().registerEvents(new DispenserDispenseItem(), this);
+ getServer().getPluginManager().registerEvents(new PlayerMoveAbilityItem(), this);
+ getServer().getPluginManager().registerEvents(new PlayerEnterVehicle(), this);
+ getServer().getPluginManager().registerEvents(new PistonEvents(), this);
+ getServer().getPluginManager().registerEvents(new FrpgPlayerCraftItemEventCaller(), this);
+ getServer().getPluginManager().registerEvents(new FrpgAbilityItemMovedEventCaller(), this);
+ getServer().getPluginManager().registerEvents(new FrpgPlayerRightClickEventCaller(), this);
+
+ //Register commands
+ getCommand("frpg").setExecutor(new FrpgCommands());
+ getCommand("spite").setExecutor(new SpiteQuote());
+
+ //If the plugin starts with players online
+ for (Player p : Bukkit.getOnlinePlayers()) {
+ LoginProcedure login = new LoginProcedure(p);
+ login.playerLogin();
}
- //Load custom enchantments
- public void registerEnchantment(Enchantment enchantment) {
- boolean registered = true;
- try {
- Field f = Enchantment.class.getDeclaredField("acceptingNew");
- f.setAccessible(true);
- f.set(null, true);
- Enchantment.registerEnchantment(enchantment);
- } catch (Exception e) {
- registered = false;
- e.printStackTrace();
- }
- if(registered){
- // It's been registered!
- }
+ //Begin Asynchronous loading of offline player stats
+ OfflinePlayerStatLoadIn offlinePlayerStatLoadIn = new OfflinePlayerStatLoadIn();
+ offlinePlayerStatLoadIn.loadInOfflinePlayers();
+
+ //Check extra stuff on load-up
+ //saveResource("perkConfig.yml",false);
+ //ymlManager.updateCheckYML("perkConfig.yml");
+ //test();
+ }
+
+ public void test() { //The purpose of this is to just place test code to run when the plugin is enabled or disabled
+
+ Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
+
+ File f = new File(plugin.getDataFolder(), "perkConfig.yml");
+ f.setReadable(true, false);
+ f.setWritable(true, false);
+ YamlConfiguration config = YamlConfiguration.loadConfiguration(f);
+
+ final String testConfigPath = "global.skill-1.level-1.test";
+ Object test = config.get(testConfigPath);
+ System.out.println(test);
+ System.out.println(test.getClass());
+ //CustomRecipe customRecipe = new CustomContainerImporter(testConfigPath).getCustomRecipe(test,"TEST");
+ //customRecipe.addTranslatedVariants();
+ //System.out.println(customRecipe);
+ //System.out.println(CustomContainerImporter.convertListedTableRowToMap(test,testConfigPath));
+ }
+
+ public void onDisable() {
+ log(Level.INFO, "Shutting down FreeRPG");
+
+ //Does everything that would normally be done if a player were to log out
+ for (Player p : Bukkit.getOnlinePlayers()) {
+ LogoutProcedure logout = new LogoutProcedure(p);
+ try {
+ logout.playerLogout(true);
+ } catch (IOException e) {
+ log(Level.ERROR, e.getMessage());
+ }
}
- public void unregisterEnchantments(Enchantment enchantment) {
- try {
- Field keyField = Enchantment.class.getDeclaredField("byKey");
+ PlacedBlockFileManager saveBlocks = new PlacedBlockFileManager();
+ saveBlocks.writePlacedBlocks();
+ RecentPlayersFileManager recentPlayersFileManager = new RecentPlayersFileManager();
+ recentPlayersFileManager.writeRecentPlayers();
+ LeaderBoardFilesManager leaderBoardFilesManager = new LeaderBoardFilesManager();
+ leaderBoardFilesManager.writeOutPlayerLeaderBoardFile();
+
+ ConfigLoad configLoad = new ConfigLoad();
+ if (configLoad.isSaveRunTimeData()) {
+ RunTimeData runTimeData = new RunTimeData();
+ runTimeData.logRunTimeData();
+ }
+ }
+
+ //Load custom enchantments
+ public void registerEnchantment(Enchantment enchantment) {
+ boolean registered = true;
+ try {
+ Field f = Enchantment.class.getDeclaredField("acceptingNew");
+ f.setAccessible(true);
+ f.set(null, true);
+ Enchantment.registerEnchantment(enchantment);
+ } catch (Exception e) {
+ registered = false;
+ log(Level.ERROR, e.getMessage());
+ }
+ if (registered) {
+ // It's been registered!
+ }
+ }
- keyField.setAccessible(true);
- @SuppressWarnings("unchecked")
- HashMap byKey = (HashMap) keyField.get(null);
+ public void unregisterEnchantments(Enchantment enchantment) {
+ try {
+ Field keyField = Enchantment.class.getDeclaredField("byKey");
- if(byKey.containsKey(enchantment.getKey())) {
- byKey.remove(enchantment.getKey());
- }
+ keyField.setAccessible(true);
+ @SuppressWarnings("unchecked")
+ HashMap byKey = (HashMap) keyField.get(
+ null);
- Field nameField = Enchantment.class.getDeclaredField("byName");
+ if (byKey.containsKey(enchantment.getKey())) {
+ byKey.remove(enchantment.getKey());
+ }
- nameField.setAccessible(true);
- @SuppressWarnings("unchecked")
- HashMap byName = (HashMap) nameField.get(null);
+ Field nameField = Enchantment.class.getDeclaredField("byName");
- if(byName.containsKey(enchantment.getName())) {
- byName.remove(enchantment.getName());
- }
+ nameField.setAccessible(true);
+ @SuppressWarnings("unchecked")
+ HashMap byName = (HashMap) nameField.get(null);
- } catch (Exception ignored) { }
+ if (byName.containsKey(enchantment.getName())) {
+ byName.remove(enchantment.getName());
+ }
+ } catch (Exception ignored) {
}
-
+ }
}
diff --git a/src/main/java/mc/carlton/freerpg/brewingEvents/BrewingInventoryClick.java b/src/main/java/mc/carlton/freerpg/brewingEvents/BrewingInventoryClick.java
deleted file mode 100644
index 66252fd..0000000
--- a/src/main/java/mc/carlton/freerpg/brewingEvents/BrewingInventoryClick.java
+++ /dev/null
@@ -1,168 +0,0 @@
-package mc.carlton.freerpg.brewingEvents;
-
-import mc.carlton.freerpg.FreeRPG;
-import mc.carlton.freerpg.gameTools.BrewingStandUserTracker;
-import mc.carlton.freerpg.globalVariables.ItemGroups;
-import mc.carlton.freerpg.perksAndAbilities.Alchemy;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import mc.carlton.freerpg.playerInfo.PlayerStats;
-import org.bukkit.Material;
-import org.bukkit.block.BrewingStand;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.inventory.ClickType;
-import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.event.inventory.InventoryType;
-import org.bukkit.inventory.BrewerInventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.PotionMeta;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.potion.PotionData;
-import org.bukkit.potion.PotionType;
-import org.bukkit.scheduler.BukkitRunnable;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class BrewingInventoryClick implements Listener {
- Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
- @EventHandler(priority = EventPriority.HIGHEST)
- void onInventoryClick(InventoryClickEvent e) {
- if (e.isCancelled()) {
- return;
- }
- try {
- InventoryType invType = e.getClickedInventory().getType();
- } catch (Exception except) {
- return;
- }
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("alchemy")) {
- return;
- }
-
- /* Perk removed
- if (e.getInventory().getHolder() instanceof BrewingStand) { //This section is very buggy, and not clean. Hopefully I can improve it in the future
- Player p = (Player) e.getWhoClicked();
- BrewingStandUserTracker brewTracker = new BrewingStandUserTracker();
- brewTracker.addstand((BrewingStand) e.getInventory().getHolder(),p);
- int slot = e.getSlot();
- if ( (slot <= 5) || (e.getClick() == ClickType.SHIFT_LEFT || e.getClick() == ClickType.SHIFT_RIGHT) ) {
- BrewerInventory brewingInventory = (BrewerInventory) e.getInventory();
- playerStats pStatClass = new playerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- int speedBrewingLevel = (int) pStat.get("alchemy").get(7);
- int time = (int) Math.round((1 - speedBrewingLevel * 0.15) * 400);
- final BrewingStand stand = (BrewingStand) e.getInventory().getHolder();
- stand.setBrewingTime(time);
- stand.update();
- }
- }
- */
-
- if (e.getInventory().getHolder() instanceof BrewingStand) { //This section is very buggy, and not clean. Hopefully I can improve it in the future
- Player p = (Player) e.getWhoClicked();
- BrewingStandUserTracker brewTracker = new BrewingStandUserTracker();
- brewTracker.addstand((BrewingStand) e.getInventory().getHolder(), p);
- }
-
- if (e.getClick() != ClickType.LEFT) {
- return;
- }
- if (e.getClickedInventory() instanceof BrewerInventory) {
- ItemGroups itemGroups = new ItemGroups();
- List oldIngredients = itemGroups.getOldIngredients();
- List newIngredients = itemGroups.getNewIngredients();
- ItemStack heroPotion = itemGroups.getHeroPotion();
- ItemStack fatiguePotion = itemGroups.getFatiguePotion();
- ItemStack hastePotion = itemGroups.getHastePotion();
- ItemStack decayPotion = itemGroups.getDecayPotion();
- ItemStack resistancePotion = itemGroups.getResistancePotion();
-
-
- BrewerInventory brewingInventory = (BrewerInventory) e.getClickedInventory();
- Player p = (Player) e.getWhoClicked();
- if (e.getSlot() == 3) {
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- ItemStack awkwardBottle = new ItemStack(Material.POTION,1);
- PotionMeta awkward = (PotionMeta) awkwardBottle.getItemMeta();
- awkward.setBasePotionData(new PotionData(PotionType.AWKWARD));
- awkwardBottle.setItemMeta(awkward);
- final ItemStack ingredient = e.getCurrentItem();
- final ItemStack cursorClone = e.getCursor().clone();
- final ItemStack potionSlot1 = e.getInventory().getItem(0);
- final ItemStack potionSlot2 = e.getInventory().getItem(1);
- final ItemStack potionSlot3 = e.getInventory().getItem(2);
- final ItemStack[] potionSlots = {potionSlot1,potionSlot2,potionSlot3};
- if (cursorClone == null) {
- return;
- }
- if (cursorClone.getType() == Material.AIR) {
- return;
- }
- if (cursorClone.getType() == ingredient.getType()) {
- e.setCancelled(true);
- return;
- }
- new BukkitRunnable() {
- @Override
- public void run() {
- if (!(oldIngredients.contains(cursorClone.getType()))) {
- e.getView().setCursor(ingredient);
- e.getClickedInventory().setItem(e.getSlot(), cursorClone);
- p.updateInventory();
- }
- Alchemy alchemyClass = new Alchemy(p);
- if (newIngredients.contains(cursorClone.getType())) {
- ItemStack[] potionSlots = {potionSlot1,potionSlot2,potionSlot3};
- boolean[] slotsAwkward = {alchemyClass.comparePotionEffects(potionSlot1, awkwardBottle), alchemyClass.comparePotionEffects(potionSlot2, awkwardBottle), alchemyClass.comparePotionEffects(potionSlot3, awkwardBottle)};
- boolean proceed = true;
- for (int i = 0; i < 3; i++) {
- if (slotsAwkward[i]) {
- continue;
- } else if (potionSlots[i] == null) {
- continue;
- } else if (potionSlots[i].getType() == Material.AIR) {
- continue;
- }
- proceed = false;
- break;
- }
- if (proceed) {
- if (newIngredients.indexOf(cursorClone.getType()) == 0 && (int)pStat.get("alchemy").get(9) >= 1) {
- alchemyClass.startBrewing(brewingInventory, heroPotion, cursorClone);
- } else if (newIngredients.indexOf(cursorClone.getType()) == 1 && (int)pStat.get("alchemy").get(9) >= 2) {
- alchemyClass.startBrewing(brewingInventory, fatiguePotion, cursorClone);
- } else if (newIngredients.indexOf(cursorClone.getType()) == 2 && (int)pStat.get("alchemy").get(9) >= 3) {
- alchemyClass.startBrewing(brewingInventory, hastePotion, cursorClone);
- } else if (newIngredients.indexOf(cursorClone.getType()) == 3 && (int)pStat.get("alchemy").get(9) >= 4) {
- alchemyClass.startBrewing(brewingInventory, decayPotion, cursorClone);
- } else if (newIngredients.indexOf(cursorClone.getType()) == 4 && (int)pStat.get("alchemy").get(9) >= 5) {
- alchemyClass.startBrewing(brewingInventory, resistancePotion, cursorClone);
- }
- }
- } else if (cursorClone.getType() == Material.GLOWSTONE_DUST || cursorClone.getType() == Material.REDSTONE) {
- boolean[] slotsToCheck = {false,false,false};
- for (int i = 0; i < 3; i++) {
- if (potionSlots[i] != null) {
- if (potionSlots[i].getItemMeta().hasEnchant(Enchantment.LOYALTY)) {
- slotsToCheck[i] = true;
- }
- }
- }
- if ( !slotsToCheck[0] && !slotsToCheck[1] && !slotsToCheck[2]) {
- return;
- }
- alchemyClass.upgradeBrewing(brewingInventory, cursorClone,slotsToCheck);
- }
- }
- }.runTaskLater(plugin, 1);
- }
- }
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/brewingEvents/FinishedBrewing.java b/src/main/java/mc/carlton/freerpg/brewingEvents/FinishedBrewing.java
deleted file mode 100644
index b09acbf..0000000
--- a/src/main/java/mc/carlton/freerpg/brewingEvents/FinishedBrewing.java
+++ /dev/null
@@ -1,96 +0,0 @@
-package mc.carlton.freerpg.brewingEvents;
-
-import mc.carlton.freerpg.FreeRPG;
-import mc.carlton.freerpg.gameTools.BrewingStandUserTracker;
-import mc.carlton.freerpg.perksAndAbilities.Alchemy;
-import mc.carlton.freerpg.playerInfo.ChangeStats;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import org.bukkit.ChatColor;
-import org.bukkit.Material;
-import org.bukkit.block.BrewingStand;
-import org.bukkit.enchantments.Enchantment;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.inventory.BrewEvent;
-import org.bukkit.inventory.BrewerInventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.meta.PotionMeta;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.potion.PotionEffect;
-import org.bukkit.potion.PotionEffectType;
-import org.bukkit.scheduler.BukkitRunnable;
-
-import java.util.Map;
-
-public class FinishedBrewing implements Listener {
- Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
- @EventHandler(priority = EventPriority.HIGH)
- void onBrewComplete(BrewEvent e){
- if (e.isCancelled()) {
- return;
- }
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("alchemy")) {
- return;
- }
- BrewerInventory inventory = e.getContents();
- ItemStack ingredient = inventory.getItem(3).clone();
- ItemStack[] slotItems = {inventory.getItem(0),inventory.getItem(1),inventory.getItem(2)};
- BrewingStandUserTracker brewTracker = new BrewingStandUserTracker();
- Player p = brewTracker.getPlayer(inventory.getHolder());
- if (p != null) {
- Alchemy alchemyClass = new Alchemy(p);
- alchemyClass.giveBrewingEXP(ingredient,slotItems);
- }
- if (ingredient.getType() == Material.DRAGON_BREATH || ingredient.getType() == Material.GUNPOWDER) {
- new BukkitRunnable() {
- @Override
- public void run() {
- BrewingStand stand = inventory.getHolder();
- for (int i=0; i<3;i++) {
- ItemStack slot_i = slotItems[i];
- if (slot_i != null) {
- if (slot_i.getType() != Material.AIR) {
- if (slot_i.getEnchantments().containsKey(Enchantment.LOYALTY) || slot_i.getEnchantments().containsKey(Enchantment.DURABILITY)) {
- PotionMeta slotMeta = (PotionMeta) slot_i.getItemMeta();
- String normalName = slotMeta.getDisplayName().substring(2);
- if (ingredient.getType() == Material.GUNPOWDER) {
- if (slot_i.getType() == Material.POTION) {
- slot_i.setType(Material.SPLASH_POTION);
- slotMeta.setDisplayName(ChatColor.RESET + "Splash " + normalName);
- }
- }
- else {
- if (slot_i.getType() == Material.SPLASH_POTION) {
- slot_i.setType(Material.LINGERING_POTION);
- normalName = normalName.substring(7);
- slotMeta.setDisplayName(ChatColor.RESET + "Lingering " + normalName);
- PotionEffectType effectType = slotMeta.getCustomEffects().get(0).getType();
- int newLength = (int) Math.round(slotMeta.getCustomEffects().get(0).getDuration()*0.25);
- int level = slotMeta.getCustomEffects().get(0).getAmplifier();
- slotMeta.addCustomEffect(new PotionEffect(effectType,newLength,level),true);
- }
- }
- slot_i.setItemMeta(slotMeta);
- stand.getSnapshotInventory().setItem(i,slot_i);
- stand.update();
- if (p != null) {
- ConfigLoad configLoad1 = new ConfigLoad();
- Map expMap = configLoad1.getExpMapForSkill("alchemy");
- ChangeStats increaseStats = new ChangeStats(p);
- increaseStats.changeEXP("alchemy", expMap.get("brewSplashPotion"));
- }
- }
- }
-
- }
- }
-
- }
- }.runTaskLater(plugin, 1);
- }
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/clickEvents/PlayerLeftClick.java b/src/main/java/mc/carlton/freerpg/clickEvents/PlayerLeftClick.java
deleted file mode 100644
index c95a413..0000000
--- a/src/main/java/mc/carlton/freerpg/clickEvents/PlayerLeftClick.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package mc.carlton.freerpg.clickEvents;
-
-import mc.carlton.freerpg.globalVariables.ItemGroups;
-import mc.carlton.freerpg.perksAndAbilities.*;
-import mc.carlton.freerpg.playerInfo.AbilityTracker;
-import mc.carlton.freerpg.playerInfo.PlayerStats;
-import org.bukkit.GameMode;
-import org.bukkit.Material;
-import org.bukkit.World;
-import org.bukkit.block.BlockFace;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.Action;
-import org.bukkit.event.player.PlayerInteractEvent;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-
-public class PlayerLeftClick implements Listener {
-
- @EventHandler
- void onLeftClick(PlayerInteractEvent e) {
- Action a = e.getAction();
-
- if ((a.equals(Action.LEFT_CLICK_AIR)) || (a.equals(Action.LEFT_CLICK_BLOCK))) {
- Player p = e.getPlayer();
- if (p.getGameMode() == GameMode.CREATIVE) {
- return;
- }
- World world = p.getWorld();
- Material itemType = p.getInventory().getItemInMainHand().getType();
-
- ItemGroups itemGroups = new ItemGroups();
- List leftClickItems = itemGroups.getLeftClickItems();
-
- if (itemType == Material.FISHING_ROD && a.equals(Action.LEFT_CLICK_BLOCK)) {
- Fishing fishingClass = new Fishing(p);
- fishingClass.initiateAbility();
- }
-
- else if (itemType == Material.BOW) {
- Archery archeryClass = new Archery(p);
- archeryClass.initiateAbility();
- }
- else if (itemType == Material.CROSSBOW) {
- Archery archeryClass = new Archery(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- if ((int) pStat.get("archery").get(12) > 0) {
- archeryClass.initiateAbility();
- }
- }
- else if (p.getVehicle() != null) {
- EntityType[] acceptableVehicles0 = {EntityType.HORSE,EntityType.SKELETON_HORSE,EntityType.ZOMBIE_HORSE,EntityType.PIG,EntityType.DONKEY,EntityType.MULE,EntityType.LLAMA};
- List acceptableVehicles = Arrays.asList(acceptableVehicles0);
- if (!leftClickItems.contains(itemType) && acceptableVehicles.contains(p.getVehicle().getType())) {
- AbilityTracker abilities = new AbilityTracker(p);
- Integer[] pAbilities = abilities.getPlayerAbilities();
- if (pAbilities[6] > -1) {
- BeastMastery beastMasteryClass = new BeastMastery(p);
- beastMasteryClass.enableAbility();
- }
- }
- }
-
-
- if (a.equals(Action.LEFT_CLICK_BLOCK)) {
- BlockFace blockface = e.getBlockFace();
- Digging diggingClass = new Digging(p);
- diggingClass.storeBlockFace(blockface);
- }
- }
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/clickEvents/PlayerLeftClickDeveloper.java b/src/main/java/mc/carlton/freerpg/clickEvents/PlayerLeftClickDeveloper.java
deleted file mode 100644
index 6f395fc..0000000
--- a/src/main/java/mc/carlton/freerpg/clickEvents/PlayerLeftClickDeveloper.java
+++ /dev/null
@@ -1,85 +0,0 @@
-package mc.carlton.freerpg.clickEvents;
-
-import mc.carlton.freerpg.globalVariables.ItemGroups;
-import mc.carlton.freerpg.perksAndAbilities.*;
-import mc.carlton.freerpg.playerInfo.AbilityTracker;
-import mc.carlton.freerpg.playerInfo.PlayerStats;
-import mc.carlton.freerpg.serverInfo.RunTimeData;
-import org.bukkit.GameMode;
-import org.bukkit.Material;
-import org.bukkit.World;
-import org.bukkit.block.BlockFace;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.Action;
-import org.bukkit.event.player.PlayerInteractEvent;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class PlayerLeftClickDeveloper implements Listener {
-
- @EventHandler
- void onLeftClick(PlayerInteractEvent e) {
- Action a = e.getAction();
-
- if ((a.equals(Action.LEFT_CLICK_AIR)) || (a.equals(Action.LEFT_CLICK_BLOCK))) {
- RunTimeData runTimeData = new RunTimeData();
- Player p = e.getPlayer();
- if (p.getGameMode() == GameMode.CREATIVE) {
- return;
- }
- World world = p.getWorld();
- Material itemType = p.getInventory().getItemInMainHand().getType();
-
- ItemGroups itemGroups = new ItemGroups();
- List leftClickItems = itemGroups.getLeftClickItems();
-
- long timer = System.currentTimeMillis();
- if (itemType == Material.FISHING_ROD && a.equals(Action.LEFT_CLICK_BLOCK)) {
- Fishing fishingClass = new Fishing(p);
- fishingClass.initiateAbility();
- }
-
- else if (itemType == Material.BOW) {
- Archery archeryClass = new Archery(p);
- archeryClass.initiateAbility();
- }
- else if (itemType == Material.CROSSBOW) {
- Archery archeryClass = new Archery(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- if ((int) pStat.get("archery").get(12) > 0) {
- archeryClass.initiateAbility();
- }
- }
- else if (p.getVehicle() != null) {
- if (!leftClickItems.contains(itemType) && p.getVehicle().getType() == EntityType.HORSE) {
- AbilityTracker abilities = new AbilityTracker(p);
- Integer[] pAbilities = abilities.getPlayerAbilities();
- if (pAbilities[6] > -1) {
- BeastMastery beastMasteryClass = new BeastMastery(p);
- beastMasteryClass.enableAbility();
- }
- }
- }
-
-
- if (a.equals(Action.LEFT_CLICK_BLOCK)) {
- long timer1 = System.currentTimeMillis();
- BlockFace blockface = e.getBlockFace();
- Digging diggingClass = new Digging(p);
- diggingClass.storeBlockFace(blockface);
- long storeBlockFaceTime = System.currentTimeMillis() - timer1;
- runTimeData.addTime(storeBlockFaceTime,"blockFace");
-
- }
- long allConditionals = System.currentTimeMillis() - timer;
- runTimeData.addTime(allConditionals,"leftClickConditionals");
-
- }
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/clickEvents/PlayerRightClick.java b/src/main/java/mc/carlton/freerpg/clickEvents/PlayerRightClick.java
deleted file mode 100644
index 2f149c8..0000000
--- a/src/main/java/mc/carlton/freerpg/clickEvents/PlayerRightClick.java
+++ /dev/null
@@ -1,282 +0,0 @@
-package mc.carlton.freerpg.clickEvents;
-
-import mc.carlton.freerpg.FreeRPG;
-import mc.carlton.freerpg.gameTools.LanguageSelector;
-import mc.carlton.freerpg.globalVariables.ItemGroups;
-import mc.carlton.freerpg.perksAndAbilities.*;
-import mc.carlton.freerpg.playerInfo.*;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import mc.carlton.freerpg.serverInfo.WorldGuardChecks;
-import org.bukkit.*;
-import org.bukkit.block.Block;
-import org.bukkit.entity.EntityType;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.block.Action;
-import org.bukkit.event.player.PlayerInteractEvent;
-import org.bukkit.inventory.EquipmentSlot;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.scheduler.BukkitRunnable;
-
-import java.util.*;
-
-
-public class PlayerRightClick implements Listener {
- Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
-
- @EventHandler
- void onRightClick(PlayerInteractEvent e) {
- Action a = e.getAction();
- if (e.getHand() == EquipmentSlot.OFF_HAND) {
- return;
- }
- if ((a.equals(Action.RIGHT_CLICK_AIR)) || (a.equals(Action.RIGHT_CLICK_BLOCK))) {
- Player p = e.getPlayer();
- PlayerStats pStatClass = new PlayerStats(p);
- if (p.getGameMode() == GameMode.CREATIVE) {
- return;
- }
- Map> pStat = pStatClass.getPlayerData();
- ChangeStats increaseStats = new ChangeStats(p);
- AbilityTracker abilities = new AbilityTracker(p);
- Integer[] pAbilities = abilities.getPlayerAbilities();
- ItemStack itemInHand = p.getInventory().getItemInMainHand();
- Material itemInHandType = itemInHand.getType();
- ItemGroups itemGroups = new ItemGroups();
- List pickaxes = itemGroups.getPickaxes();
- List axes = itemGroups.getAxes();
- List hoes = itemGroups.getHoes();
- List swords = itemGroups.getSwords();
- List shovels = itemGroups.getShovels();
- List noRightClick = itemGroups.getNoRightClick();
- List actionableBlocks = itemGroups.getActionableBlocks();
-
- LanguageSelector langManager = new LanguageSelector(p);
-
-
- //Right clicking blocks
- if (a.equals(Action.RIGHT_CLICK_BLOCK)) {
- //Composter EXP
- Farming farmingClass = new Farming(p);
- farmingClass.composterEXP(e.getClickedBlock());
-
- //Repair
- if (e.getClickedBlock().getType() == Material.IRON_BLOCK && !itemInHandType.isBlock()) {
- if (pAbilities[0] != -2 && pAbilities[2] != -2 && pAbilities[7] != -2) {
- Repair repairClass = new Repair(p);
- repairClass.repairItem();
- e.setCancelled(true);
- }
- else {
- p.sendMessage(ChatColor.RED + langManager.getString("cannotRepair"));
- }
- return;
- }
- //Salvaging
- else if (e.getClickedBlock().getType() == Material.GOLD_BLOCK && !itemInHandType.isBlock()) {
- if (p.isSneaking()) {
- if (pAbilities[0] != -2 && pAbilities[2] != -2 && pAbilities[7] != -2) {
- Repair repairClass = new Repair(p);
- repairClass.salvaging();
- e.setCancelled(true);
- }
- else {
- p.sendMessage(ChatColor.RED + langManager.getString("cannotSalvage"));
- }
- return;
- }
- }
- //Stopping abilities from activating on stuff like doors
- if (actionableBlocks.contains(e.getClickedBlock().getType())) {
- return;
- }
- }
-
- if (p.getInventory().getItemInOffHand().getType() == Material.TORCH && a.equals(Action.RIGHT_CLICK_BLOCK)) {
- return;
- }
-
- int waitTicks = 0;
- //Shield smoothness
- if (p.getInventory().getItemInOffHand().getType() == Material.SHIELD) {
- waitTicks = 6;
- }
-
-
- //Explosions
- if (itemInHandType == Material.FLINT_AND_STEEL) {
- Block blockLit = e.getClickedBlock();
- if (blockLit == null) {
- return;
- }
- WorldGuardChecks BuildingCheck = new WorldGuardChecks();
- ConfigLoad canExplode = new ConfigLoad();
- if (!canExplode.isAllowExplosions()) {
- return;
- }
- if (!BuildingCheck.canBuild(p, blockLit.getLocation())) {
- return;
- }
- if (blockLit.getType() == Material.TNT) {
- e.setCancelled(true);
- Mining miningClass = new Mining(p);
- miningClass.tntExplode(blockLit);
- }
- }
-
- //Digging
- else if (shovels.contains(itemInHandType)) {
- Digging diggingClass = new Digging(p);
- if (a.equals(Action.RIGHT_CLICK_BLOCK)) {
- if (!(e.getClickedBlock().getType() == Material.GRASS_BLOCK)) {
- new BukkitRunnable() {
- @Override
- public void run() {
- if (p.isOnline()) {
- if (!p.isBlocking()) {
- diggingClass.initiateAbility();
- }
- }
- }
- }.runTaskLater(plugin, waitTicks);
-
- }
- } else {
- new BukkitRunnable() {
- @Override
- public void run() {
- if (p.isOnline()) {
- if (!p.isBlocking()) {
- diggingClass.initiateAbility();
- }
- }
- }
- }.runTaskLater(plugin, waitTicks);
- }
- }
- //Woodcutting and AxeMastery
- else if (axes.contains(itemInHandType)) {
- Woodcutting woodcuttingClass = new Woodcutting(p);
- if (a.equals(Action.RIGHT_CLICK_BLOCK)) {
- if (woodcuttingClass.blacklistedBlock(e.getClickedBlock())) {
- return;
- }
- }
- new BukkitRunnable() {
- @Override
- public void run() {
- if (p.isOnline()) {
- if (!p.isBlocking()) {
- woodcuttingClass.initiateAbility();
- }
- }
- }
- }.runTaskLater(plugin, waitTicks);
- AxeMastery axeMasteryClass = new AxeMastery(p);
- new BukkitRunnable() {
- @Override
- public void run() {
- if (p.isOnline()) {
- if (!p.isBlocking()) {
- axeMasteryClass.initiateAbility();
- }
- }
- }
- }.runTaskLater(plugin, waitTicks);
- }
- //Mining
- else if (pickaxes.contains(itemInHandType)) {
- Mining miningClass = new Mining(p);
- new BukkitRunnable() {
- @Override
- public void run() {
- if (p.isOnline()) {
- if (!p.isBlocking()) {
- miningClass.initiateAbility();
- }
- }
- }
- }.runTaskLater(plugin, waitTicks);
- }
-
- //Farming
- else if (hoes.contains(itemInHandType)) {
- if (a.equals(Action.RIGHT_CLICK_BLOCK)) {
- if (!(e.getClickedBlock().getType() == Material.DIRT || e.getClickedBlock().getType() == Material.GRASS_BLOCK || e.getClickedBlock().getType() == Material.GRASS_PATH )) {
- Farming farmingClass = new Farming(p);
- farmingClass.initiateAbility();
- } else {
- Material blockAbove = e.getClickedBlock().getRelative(0,1,0).getType();
- if (blockAbove == Material.AIR || blockAbove == Material.CAVE_AIR || blockAbove == Material.VOID_AIR) {
- ConfigLoad configLoad = new ConfigLoad();
- Map expMap = configLoad.getExpMapForSkill("farming");
- increaseStats.changeEXP("farming", expMap.get("tillLand"));
- }
- }
- } else {
- Farming farmingClass = new Farming(p);
- farmingClass.initiateAbility();
- }
-
- } else if (itemInHandType == Material.BONE_MEAL && a.equals(Action.RIGHT_CLICK_BLOCK)) {
- Farming farmingClass = new Farming(p);
- farmingClass.fertilizerSave(e.getClickedBlock());
- }
-
- //Archery
- else if (itemInHandType == Material.BOW) {
- if (pAbilities[5] > -1) {
- Archery archeryClass = new Archery(p);
- archeryClass.enableAbility();
- }
- } else if (itemInHandType == Material.CROSSBOW) {
- if ((int) pStat.get("archery").get(12) > 0) {
- Archery archeryClass = new Archery(p);
- if (pAbilities[5] > -1) {
- archeryClass.enableAbility();
- archeryClass.crossbowAbility();
- } else if (pAbilities[5] == -2) {
- archeryClass.crossbowAbility();
- }
- }
- }
-
- //beastMastery
- else if (p.getVehicle() != null) {
- EntityType[] acceptableVehicles0 = {EntityType.HORSE,EntityType.SKELETON_HORSE,EntityType.ZOMBIE_HORSE,EntityType.PIG,EntityType.DONKEY,EntityType.MULE,EntityType.LLAMA};
- List acceptableVehicles = Arrays.asList(acceptableVehicles0);
- if (acceptableVehicles.contains(p.getVehicle().getType())) {
- if ((noRightClick.contains(itemInHandType) || (a == Action.RIGHT_CLICK_AIR && itemInHand.getType().isBlock()))) {
- BeastMastery beastMasteryClass = new BeastMastery(p);
- beastMasteryClass.initiateAbility();
- }
- }
- }
-
- //Swordsmanship
- else if (swords.contains(itemInHandType)) {
- Swordsmanship swordsmanshipClass = new Swordsmanship(p);
- new BukkitRunnable() {
- @Override
- public void run() {
- if (p.isOnline()) {
- if (!p.isBlocking()) {
- swordsmanshipClass.initiateAbility();
- }
- }
- }
- }.runTaskLater(plugin, waitTicks);
- }
-
- //Defense
- else if (itemInHandType == Material.AIR) {
- Defense defenseClass = new Defense(p);
- defenseClass.initiateAbility();
- }
-
-
- }
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/clickEvents/PlayerRightClickEntity.java b/src/main/java/mc/carlton/freerpg/clickEvents/PlayerRightClickEntity.java
deleted file mode 100644
index 0ed7ce9..0000000
--- a/src/main/java/mc/carlton/freerpg/clickEvents/PlayerRightClickEntity.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package mc.carlton.freerpg.clickEvents;
-
-import mc.carlton.freerpg.perksAndAbilities.BeastMastery;
-import mc.carlton.freerpg.perksAndAbilities.Farming;
-import org.bukkit.GameMode;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.player.PlayerInteractEntityEvent;
-
-public class PlayerRightClickEntity implements Listener {
- @EventHandler(priority = EventPriority.HIGH)
- void onRightClick(PlayerInteractEntityEvent e) {
- if (e.isCancelled()) {
- return;
- }
- Player p = e.getPlayer();
- if (p.getGameMode() == GameMode.CREATIVE) {
- return;
- }
- Entity entity = e.getRightClicked();
-
- //Farming
- Farming farmingClass = new Farming(p);
- farmingClass.babyAnimalGrow(entity);
- farmingClass.milkingEXP(entity);
-
- //Beast Mastery
- BeastMastery beastMasteryClass = new BeastMastery(p);
- beastMasteryClass.getHorseStats(entity);
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/combatEvents/ArrowLand.java b/src/main/java/mc/carlton/freerpg/combatEvents/ArrowLand.java
deleted file mode 100644
index 223fb5e..0000000
--- a/src/main/java/mc/carlton/freerpg/combatEvents/ArrowLand.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package mc.carlton.freerpg.combatEvents;
-
-import mc.carlton.freerpg.perksAndAbilities.Archery;
-import org.bukkit.entity.*;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.ProjectileHitEvent;
-import org.bukkit.projectiles.ProjectileSource;
-
-public class ArrowLand implements Listener {
- @EventHandler
- void onArrowLand(ProjectileHitEvent e){
- Entity projectile = e.getEntity();
- if (projectile instanceof Projectile) {
- if (projectile instanceof Arrow || projectile instanceof SpectralArrow) {
- ProjectileSource shooter = ((Projectile) projectile).getShooter();
- if (shooter instanceof Player) {
- Player p = (Player) shooter;
- Archery archeryClass = new Archery(p);
- archeryClass.retrievalRemoval(projectile);
-
- }
- }
- }
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/combatEvents/EntityGetDamaged.java b/src/main/java/mc/carlton/freerpg/combatEvents/EntityGetDamaged.java
deleted file mode 100644
index bd5e3e1..0000000
--- a/src/main/java/mc/carlton/freerpg/combatEvents/EntityGetDamaged.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package mc.carlton.freerpg.combatEvents;
-
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import mc.carlton.freerpg.playerInfo.PlayerStats;
-import org.bukkit.entity.*;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.EntityDamageEvent;
-
-import java.util.*;
-
-public class EntityGetDamaged implements Listener {
- @EventHandler(priority = EventPriority.HIGHEST)
-
- void onEntityDamaged(EntityDamageEvent e) {
- if (e.isCancelled()) {
- return;
- }
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("beastMastery")) {
- return;
- }
- if (e.getEntity() instanceof Entity) {
- Entity wolf = e.getEntity();
- if (wolf.getType() == EntityType.WOLF) {
- Tameable dog = (Tameable) wolf;
- if (dog.isTamed()){
- if (!(dog.getOwner() instanceof Player)) { //Player is offline or something like that.
- return;
- }
- Player p = (Player) dog.getOwner();
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- if (e.getCause().equals(EntityDamageEvent.DamageCause.FALL)) {
- if ((int)pStat.get("beastMastery").get(11) > 0) {
- e.setDamage(0);
- }
- }
- else {
- int thickFurLevel = (int)pStat.get("beastMastery").get(7);
- double thickFurMultiplier = 1 - thickFurLevel*0.1;
- e.setDamage(e.getDamage()*thickFurMultiplier);
- }
- }
- }
- }
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/combatEvents/EntityHitEntity.java b/src/main/java/mc/carlton/freerpg/combatEvents/EntityHitEntity.java
deleted file mode 100644
index 95b1745..0000000
--- a/src/main/java/mc/carlton/freerpg/combatEvents/EntityHitEntity.java
+++ /dev/null
@@ -1,326 +0,0 @@
-package mc.carlton.freerpg.combatEvents;
-
-import mc.carlton.freerpg.FreeRPG;
-import mc.carlton.freerpg.gameTools.FireworkShotByPlayerTracker;
-import mc.carlton.freerpg.globalVariables.ItemGroups;
-import mc.carlton.freerpg.perksAndAbilities.*;
-import mc.carlton.freerpg.playerInfo.*;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import org.bukkit.GameMode;
-import org.bukkit.Material;
-import org.bukkit.attribute.Attributable;
-import org.bukkit.attribute.Attribute;
-import org.bukkit.entity.*;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.EntityDamageByEntityEvent;
-import org.bukkit.event.entity.EntityDamageEvent;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.projectiles.ProjectileSource;
-import org.bukkit.scheduler.BukkitRunnable;
-import org.bukkit.util.Vector;
-
-import java.util.*;
-
-public class EntityHitEntity implements Listener {
- @EventHandler(priority = EventPriority.HIGHEST)
-
- void onEntityHit(EntityDamageByEntityEvent e) {
- Random rand = new Random();
- Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
-
- if (e.isCancelled()) {
- return;
- }
-
- if (e.getEntity().isInvulnerable()) { //Godmode check
- return;
- }
-
- //removes PvP effects if PvP is disabled
- if (e.getEntity() instanceof Player) {
- ConfigLoad loadConfig = new ConfigLoad();
- if (e.getDamager() instanceof Player) {
- if (!loadConfig.isAllowPvP()) {
- return;
- }
- }
- else if (e.getDamager() instanceof Projectile) {
- ProjectileSource shooter = ((Projectile) e.getDamager()).getShooter();
- if (shooter instanceof Player) {
- if (!loadConfig.isAllowPvP()) {
- return;
- } else if (shooter.equals(e.getEntity())) {
- return; //Shooter shot himself
- }
- }
- }
- }
- //removes hurting animals effects if hurting animals is disabled
- else if (e.getEntity() instanceof Animals) {
- ConfigLoad loadConfig = new ConfigLoad();
- if (e.getDamager() instanceof Player) {
- if (!loadConfig.isAllowHurtAnimals()) {
- return;
- }
- }
- else if (e.getDamager() instanceof Projectile) {
- if (((Projectile) e.getDamager()).getShooter() instanceof Player) {
- if (!loadConfig.isAllowHurtAnimals()) {
- return;
- }
- }
- }
- }
-
- if (e.getDamager() instanceof Player) {
- ItemGroups itemGroups = new ItemGroups();
- List shovels = itemGroups.getShovels();
- List swords = itemGroups.getSwords();
- List axes = itemGroups.getAxes();
-
-
- Player p = (Player) e.getDamager();
- if (p.getGameMode() == GameMode.CREATIVE) {
- return;
- }
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- AbilityTracker abilities = new AbilityTracker(p);
- Integer[] pAbilities = abilities.getPlayerAbilities();
-
-
-
- //Digging
- if (shovels.contains(p.getInventory().getItemInMainHand().getType())) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("digging")) {
- return;
- }
- int shovelKnightLevel = (int) pStat.get("digging").get(12);
- double multiplier = Math.min(2.0,1.0+shovelKnightLevel);
- e.setDamage(e.getDamage() * multiplier);
- }
-
- //swordsmanship
- else if (swords.contains(p.getInventory().getItemInMainHand().getType())) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("swordsmanship")) {
- return;
- }
- Swordsmanship swordsmanshipClass = new Swordsmanship(p);
- if (pAbilities[7] > -1) {
- swordsmanshipClass.enableAbility();
- }
- double damage = e.getDamage();
- if ((int)pStat.get("swordsmanship").get(13) > 0) {
- damage += 2;
- e.setDamage(damage);
- }
- Entity damagedEntity = e.getEntity();
- swordsmanshipClass.doubleHit(damagedEntity,damage);
- swordsmanshipClass.giveHitEXP(e.getFinalDamage(),damagedEntity);
- }
-
- //Defense
- else if (p.getInventory().getItemInMainHand().getType() == Material.AIR) {
- Defense defenseClass = new Defense(p);
- if (pAbilities[8] > -1) {
- defenseClass.enableAbility();
- }
- }
-
- else if (axes.contains(p.getInventory().getItemInMainHand().getType())) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("axeMastery")) {
- return;
- }
- AxeMastery axeMasteryClass = new AxeMastery(p);
- double damage = e.getDamage();
- if ((int)pStat.get("axeMastery").get(13) > 0) {
- damage += 2;
- e.setDamage(damage);
- }
- if (pAbilities[9] > -1) {
- axeMasteryClass.enableAbility();
- axeMasteryClass.greaterAxe(e.getEntity(),p.getWorld(),e.getFinalDamage());
- }
- else if (pAbilities[9] == -2) {
- axeMasteryClass.greaterAxe(e.getEntity(),p.getWorld(),e.getFinalDamage());
- }
- double multiplier = axeMasteryClass.divineCritical();
- e.setDamage(e.getDamage()*multiplier);
- axeMasteryClass.holyAxe(e.getEntity(),p.getWorld(),e.getFinalDamage());
- axeMasteryClass.giveHitEXP(e.getFinalDamage(),e.getEntity());
-
- }
-
- }
- //Arrow of Light
- else if (e.getDamager() instanceof Arrow || e.getDamager() instanceof SpectralArrow) {
- ProjectileSource shooter;
- if (e.getDamager() instanceof SpectralArrow) {
- shooter = ((SpectralArrow) e.getDamager()).getShooter();
- } else {
- shooter = ((Arrow) e.getDamager()).getShooter();
- }
- if (shooter instanceof Player) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("archery")) {
- return;
- }
- Player p = (Player) shooter;
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- Archery archeryClass = new Archery(p);
- archeryClass.explosiveArrows(e.getDamager(),e.getEntity().getLocation());
- Material arrowType = archeryClass.getArrowType();
- if (arrowType == Material.SPECTRAL_ARROW) {
- int arrowOfLightLevel = (int) pStat.get("archery").get(10);
- double multiplier = Math.min(arrowOfLightLevel * 0.05 + 1.0, 2.0);
- e.setDamage(Math.min(e.getDamage() * multiplier, 32));
- }
- archeryClass.giveHitEXP(e.getFinalDamage(),e.getEntity());
- if (e.getEntity() instanceof LivingEntity) {
- if (e.getFinalDamage() > ((LivingEntity) e.getEntity()).getHealth()) {
- archeryClass.giveKillEXP(e.getEntity());
- }
- }
- }
- }
- //Crossbow Strike
- else if (e.getDamager() instanceof Firework) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("archery")) {
- return;
- }
- Entity firework = e.getDamager();
- FireworkShotByPlayerTracker fireworkTracker = new FireworkShotByPlayerTracker();
- Player p = fireworkTracker.getPlayer(firework);
- fireworkTracker.removeFireWork(firework);
- if (p != null) {
- Archery archeryClass = new Archery(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- if ((int) pStat.get("archery").get(13) > 0) {
- e.setDamage(Math.min(e.getDamage() * 2, 32));
- archeryClass.giveHitEXP(e.getFinalDamage(),e.getEntity());
- }
- if (e.getEntity() instanceof LivingEntity) {
- if (e.getFinalDamage() > ((LivingEntity) e.getEntity()).getHealth()) {
- archeryClass.giveKillEXP(e.getEntity());
- }
- }
- }
- }
- //Sharp Teeth and Keep Away
- else if (e.getDamager() instanceof Entity) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("beastMastery")) {
- return;
- }
- Entity wolf = e.getDamager();
- if (wolf.getType() == EntityType.WOLF) {
- Tameable dog = (Tameable) wolf;
- if (dog.isTamed()) {
- if (!(dog.getOwner() instanceof Player)) { //Player is offline or something like that.
- return;
- }
- Player p = (Player) dog.getOwner();
- BeastMastery beastMastery = new BeastMastery(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
-
- double crit = 1.0;
- int critLevel = (int) pStat.get("beastMastery").get(5);
- double critChance = critLevel * 0.00025;
- if (critChance > rand.nextDouble()) {
- crit = 1.5;
- }
-
- int sharpTeethLevel = (int) pStat.get("beastMastery").get(8);
- double damageMultiplier = sharpTeethLevel * 0.1 + 1;
- e.setDamage(e.getDamage() * crit * damageMultiplier);
-
- Entity enemy = e.getEntity();
- int keepAwayLevel = (int) pStat.get("beastMastery").get(10);
- double knockBackChance = keepAwayLevel * 0.05;
- if (knockBackChance > rand.nextDouble()) {
- Vector knockback = enemy.getVelocity();
- double multiplier;
- if (knockback.length() > 0.1) {
- double newKnockback = Math.min(knockback.length() * 5, 100.0);
- multiplier = newKnockback / knockback.length();
- }
- else {
- multiplier = 5.0;
- }
- new BukkitRunnable() {
- @Override
- public void run() {
- enemy.setVelocity(knockback.multiply(multiplier).setY(0.4));
- }
- }.runTaskLater(plugin, 1);
- }
- LivingEntity livingEnemy = (LivingEntity) enemy;
- if (e.getFinalDamage() > livingEnemy.getHealth()) {
- double heartsHealed = (int) pStat.get("beastMastery").get(9);
- LivingEntity livingDog = (LivingEntity) dog;
- double maxHealth = ((Attributable) dog).getAttribute(Attribute.GENERIC_MAX_HEALTH).getBaseValue();
- livingDog.setHealth(Math.min(livingDog.getHealth() + heartsHealed, maxHealth));
- beastMastery.dogKillEntity(enemy);
- }
- beastMastery.giveHitEXP(e.getFinalDamage(),enemy);
-
- }
- }
- }
- //Wolf take damage EXP
- else if (e.getEntity() instanceof Entity) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("beastMastery")) {
- return;
- }
- if (!(e.getDamager() instanceof Player)) {
- Entity wolf = e.getEntity();
- if (wolf.getType() == EntityType.WOLF) {
- Tameable dog = (Tameable) wolf;
- if (dog.isTamed()) {
- if (!(dog.getOwner() instanceof Player)) { //Player is offline or something like that.
- return;
- }
- Player p = (Player) dog.getOwner();
- ChangeStats increaseStats = new ChangeStats(p);
- increaseStats.changeEXP("beastMastery", (int) Math.round(e.getFinalDamage() * 3) * 10);
- }
- }
- }
- }
-
- //Getting hit (defense)
- if (e.getEntity() instanceof Player) {
- Player p = (Player) e.getEntity();
- if (e.getDamage() != 0 && !e.getCause().equals(EntityDamageEvent.DamageCause.HOT_FLOOR) &&
- !e.getCause().equals(EntityDamageEvent.DamageCause.STARVATION) &&
- !e.getCause().equals(EntityDamageEvent.DamageCause.VOID) &&
- !e.getCause().equals(EntityDamageEvent.DamageCause.SUFFOCATION) &&
- !e.getCause().equals(EntityDamageEvent.DamageCause.CUSTOM) &&
- !e.getCause().equals(EntityDamageEvent.DamageCause.CONTACT)
- ) {
- Agility agilityClass = new Agility(p);
- boolean dodge = agilityClass.dodge(e.getFinalDamage());
- if (dodge) {
- e.setCancelled(true);
- }
-
- Defense defenseClass = new Defense(p);
- double multiplier = defenseClass.hardBody();
- e.setDamage(e.getDamage() * multiplier);
- defenseClass.reactions(e.getFinalDamage());
- defenseClass.giveHitEXP(e.getDamage(),e.getDamager());
- }
- }
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/combatEvents/LingeringPotionSplash.java b/src/main/java/mc/carlton/freerpg/combatEvents/LingeringPotionSplash.java
deleted file mode 100644
index 136892b..0000000
--- a/src/main/java/mc/carlton/freerpg/combatEvents/LingeringPotionSplash.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package mc.carlton.freerpg.combatEvents;
-
-import mc.carlton.freerpg.FreeRPG;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import mc.carlton.freerpg.playerInfo.PlayerStats;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.ThrownPotion;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.LingeringPotionSplashEvent;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.potion.PotionEffect;
-
-import java.util.ArrayList;
-import java.util.Map;
-
-public class LingeringPotionSplash implements Listener {
- Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
- @EventHandler(priority = EventPriority.HIGHEST)
- void onPotionSplash(LingeringPotionSplashEvent e) {
- if (e.isCancelled()) {
- return;
- }
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("alchemy")) {
- return;
- }
-
- ThrownPotion potionEntity = e.getEntity();
- if (!(potionEntity.getShooter() instanceof Player)) {
- return;
- }
- Player p = (Player) potionEntity.getShooter();
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- int potionMasterLevel = (int) pStat.get("alchemy").get(13);
- if ((int)pStat.get("global").get(15) != 1) {
- potionMasterLevel = 0;
- }
- int potionDurationLevel = (int) pStat.get("alchemy").get(4);
- double durationMultiplier = potionDurationLevel * 0.001 + 1;
- for (PotionEffect effect : potionEntity.getEffects()) {
- e.getAreaEffectCloud().addCustomEffect(new PotionEffect(effect.getType(), (int) Math.round(effect.getDuration() * durationMultiplier), effect.getAmplifier() + potionMasterLevel), true);
- }
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/combatEvents/PlayerDeath.java b/src/main/java/mc/carlton/freerpg/combatEvents/PlayerDeath.java
deleted file mode 100644
index b8a8cfe..0000000
--- a/src/main/java/mc/carlton/freerpg/combatEvents/PlayerDeath.java
+++ /dev/null
@@ -1,90 +0,0 @@
-package mc.carlton.freerpg.combatEvents;
-
-import mc.carlton.freerpg.perksAndAbilities.*;
-import mc.carlton.freerpg.playerInfo.AbilityLogoutTracker;
-import mc.carlton.freerpg.playerInfo.AbilityTracker;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import mc.carlton.freerpg.playerInfo.PlayerStats;
-import org.bukkit.NamespacedKey;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.PlayerDeathEvent;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.persistence.PersistentDataType;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-public class PlayerDeath implements Listener {
-
- @EventHandler(priority = EventPriority.HIGHEST)
- void onPlayerDie(PlayerDeathEvent e){
- Player p = e.getEntity();
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- ConfigLoad configLoad = new ConfigLoad();
- if (configLoad.getAllowedSkillsMap().get("alchemy")) {
- int immortalExperienceLevel = (int) pStat.get("enchanting").get(13);
- int expBuffLevel = (int) pStat.get("enchanting").get(4);
- double multiplier = 1 + expBuffLevel*0.002;
- e.setDroppedExp( (int) Math.round(e.getDroppedExp()/multiplier) );
- if (immortalExperienceLevel > 0) {
- e.setKeepLevel(true);
- e.setDroppedExp(0);
- }
- }
- List drops = e.getDrops();
- AbilityTracker abilities = new AbilityTracker(p);
- Integer[] pAbilities = abilities.getPlayerAbilities();
- if (pAbilities[0] != -1) {
- AbilityLogoutTracker logoutTracker = new AbilityLogoutTracker(p);
- NamespacedKey key = logoutTracker.getPlayerKeys().get("digging");
- int taskID_digging = logoutTracker.getPlayerTasks().get("digging");
- for (ItemStack drop : drops) {
- if (drop.getItemMeta().getPersistentDataContainer().has(key, PersistentDataType.STRING)) {
- ItemStack abilityItem = drop;
- Digging diggingClass = new Digging(p);
- diggingClass.preventLogoutTheft(taskID_digging, abilityItem,key,false);
- break;
- }
- }
- }
- if (pAbilities[2] != -1) {
- AbilityLogoutTracker logoutTracker = new AbilityLogoutTracker(p);
- NamespacedKey key = logoutTracker.getPlayerKeys().get("mining");
- int taskID_mining = logoutTracker.getPlayerTasks().get("mining");
- for (ItemStack drop: drops) {
- if (drop.getItemMeta().getPersistentDataContainer().has(key, PersistentDataType.STRING)) {
- ItemStack abilityItem = drop;
- Mining miningClass = new Mining(p);
- miningClass.preventLogoutTheft(taskID_mining, abilityItem,key,false);
- break;
- }
- }
- }
- if (pAbilities[7] != -1) {
- AbilityLogoutTracker logoutTracker = new AbilityLogoutTracker(p);
- NamespacedKey key = logoutTracker.getPlayerKeys().get("swordsmanship");
- int taskID_swordsmanship = logoutTracker.getPlayerTasks().get("swordsmanship");
- for (ItemStack drop: drops) {
- if (drop.getItemMeta().getPersistentDataContainer().has(key, PersistentDataType.STRING)) {
- ItemStack abilityItem = drop;
- Swordsmanship swordsmanshipClass = new Swordsmanship(p);
- swordsmanshipClass.preventLogoutTheft(taskID_swordsmanship, abilityItem,key,false);
- break;
- }
- }
- }
-
- if (!e.getKeepInventory()) { //Player does not keep inventory
- if (!configLoad.isKeepinventory()) { //Server is not using some advanced keep inventory plugin
- Global globalClass = new Global(p);
- globalClass.betterResurrectionDeath(drops);
- }
- }
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/combatEvents/PlayerKillEntity.java b/src/main/java/mc/carlton/freerpg/combatEvents/PlayerKillEntity.java
deleted file mode 100644
index 7e22257..0000000
--- a/src/main/java/mc/carlton/freerpg/combatEvents/PlayerKillEntity.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package mc.carlton.freerpg.combatEvents;
-
-import mc.carlton.freerpg.gameTools.EntityPickedUpItemStorage;
-import mc.carlton.freerpg.globalVariables.ItemGroups;
-import mc.carlton.freerpg.perksAndAbilities.*;
-import org.bukkit.GameMode;
-import org.bukkit.World;
-import org.bukkit.entity.Entity;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.EntityDeathEvent;
-import org.bukkit.inventory.ItemStack;
-
-import java.util.List;
-
-public class PlayerKillEntity implements Listener {
- @EventHandler
- void onEntityDie(EntityDeathEvent e){
- LivingEntity entity = e.getEntity();
- Player p = e.getEntity().getKiller();
-
- if (p != null) {
- if (p.getGameMode() == GameMode.CREATIVE) {
- return;
- }
- ItemGroups itemGroups = new ItemGroups();
- World world = p.getWorld();
- List drops = e.getDrops();
-
- //Farming
- Farming farmingClass = new Farming(p);
- farmingClass.animalDoubleDrops(entity,world,drops);
- farmingClass.killFarmAnimalEXP(entity);
-
- //Swordsmanship
- if (itemGroups.getSwords().contains(p.getInventory().getItemInMainHand().getType())) {
- Swordsmanship swordsmanshipClass = new Swordsmanship(p);
- swordsmanshipClass.killBuffs(e.getEntity());
- swordsmanshipClass.thirstForBlood(e.getEntity());
- swordsmanshipClass.giveKillEXP(entity);
- }
-
- //Defense
- Defense defenseClass = new Defense(p);
- defenseClass.doubleDrops(entity,drops,world);
- defenseClass.healer();
- defenseClass.giveKillEXP(entity);
-
- //Axe Mastery
- if (itemGroups.getAxes().contains(p.getInventory().getItemInMainHand().getType())) {
- AxeMastery axeMasteryClass = new AxeMastery(p);
- axeMasteryClass.revitalized();
- axeMasteryClass.warriorBlood();
- axeMasteryClass.giveKillEXP(entity);
- }
-
- //Fishing
- Fishing fishingClass = new Fishing(p);
- fishingClass.killFishEXP(entity);
-
- //Global (Souls)
- Global globalClass = new Global(p);
- globalClass.gainSoul(entity);
-
- }
-
- EntityPickedUpItemStorage entityPickedUpItemStorage = new EntityPickedUpItemStorage();
- entityPickedUpItemStorage.removeEntity(entity);
-
-
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/combatEvents/PlayerShootBow.java b/src/main/java/mc/carlton/freerpg/combatEvents/PlayerShootBow.java
deleted file mode 100644
index f038bb7..0000000
--- a/src/main/java/mc/carlton/freerpg/combatEvents/PlayerShootBow.java
+++ /dev/null
@@ -1,38 +0,0 @@
-package mc.carlton.freerpg.combatEvents;
-
-import mc.carlton.freerpg.gameTools.FireworkShotByPlayerTracker;
-import mc.carlton.freerpg.perksAndAbilities.Archery;
-
-import org.bukkit.entity.*;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.EntityShootBowEvent;
-import org.bukkit.inventory.ItemStack;
-
-public class PlayerShootBow implements Listener {
- @EventHandler(priority = EventPriority.HIGHEST)
- void onEntityShoot(EntityShootBowEvent e){
- if (e.isCancelled()) {
- return;
- }
- Entity entity = e.getEntity();
- if (entity instanceof Player && (e.getProjectile() instanceof Arrow || e.getProjectile() instanceof SpectralArrow)) {
- Player p = (Player) entity;
- ItemStack bow = e.getBow();
- Entity projectile = e.getProjectile();
- Archery archeryClass = new Archery(p);
- archeryClass.rapidFire(projectile,bow);
- archeryClass.sniper(projectile);
- archeryClass.retrieval(projectile,bow);
-
- }
- else if (entity instanceof Player && e.getProjectile() instanceof Firework) {
- Player p = (Player) entity;
- Entity projectile = e.getProjectile();
- FireworkShotByPlayerTracker fireworkTracker = new FireworkShotByPlayerTracker();
- fireworkTracker.addFirework(projectile,p);
- }
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/combatEvents/PlayerTakeDamage.java b/src/main/java/mc/carlton/freerpg/combatEvents/PlayerTakeDamage.java
deleted file mode 100644
index 20a94b0..0000000
--- a/src/main/java/mc/carlton/freerpg/combatEvents/PlayerTakeDamage.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package mc.carlton.freerpg.combatEvents;
-
-
-import mc.carlton.freerpg.perksAndAbilities.Agility;
-import mc.carlton.freerpg.perksAndAbilities.Global;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import mc.carlton.freerpg.playerInfo.PlayerStats;
-import org.bukkit.entity.Player;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.EntityDamageEvent;
-
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.Random;
-
-public class PlayerTakeDamage implements Listener {
-
- @EventHandler(priority = EventPriority.HIGHEST)
- void onPlayerTakeDamage(EntityDamageEvent e){
- if (e.isCancelled()) {
- return;
- }
- if (e.getEntity() instanceof Player) {
- Player p = (Player) e.getEntity();
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- Random rand = new Random();
- if (e.getCause() == EntityDamageEvent.DamageCause.BLOCK_EXPLOSION) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("mining")) {
- return;
- }
- if ( (int)pStat.get("mining").get(12) >0) {
- e.setDamage(0);
- }
- }
- if (e.getCause() == EntityDamageEvent.DamageCause.FALL) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("agility")) {
- return;
- }
- Agility agilityClass = new Agility(p);
- double damageReduction = agilityClass.roll(e.getFinalDamage());
- e.setDamage(e.getDamage()*damageReduction);
- }
-
- if (e.getFinalDamage() > p.getHealth()) {
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("global")) {
- return;
- }
- if ((int) pStat.get("global").get(10) > 0) {
- if ( 0.1 > rand.nextFloat()) {
- e.setDamage(0);
- Global globalClass = new Global(p);
- globalClass.avatar();
- }
- }
- }
- }
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/combatEvents/PotionSplash.java b/src/main/java/mc/carlton/freerpg/combatEvents/PotionSplash.java
deleted file mode 100644
index 4efdaa4..0000000
--- a/src/main/java/mc/carlton/freerpg/combatEvents/PotionSplash.java
+++ /dev/null
@@ -1,107 +0,0 @@
-package mc.carlton.freerpg.combatEvents;
-
-import mc.carlton.freerpg.FreeRPG;
-import mc.carlton.freerpg.globalVariables.ItemGroups;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import mc.carlton.freerpg.playerInfo.PlayerStats;
-import org.bukkit.GameMode;
-import org.bukkit.entity.LivingEntity;
-import org.bukkit.entity.Player;
-import org.bukkit.entity.ThrownPotion;
-import org.bukkit.event.EventHandler;
-import org.bukkit.event.EventPriority;
-import org.bukkit.event.Listener;
-import org.bukkit.event.entity.PotionSplashEvent;
-import org.bukkit.plugin.Plugin;
-import org.bukkit.potion.PotionEffect;
-import org.bukkit.potion.PotionEffectType;
-import org.bukkit.scheduler.BukkitRunnable;
-
-import java.util.*;
-
-public class PotionSplash implements Listener {
- Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
- @EventHandler(priority = EventPriority.HIGHEST)
- void onPotionSplash(PotionSplashEvent e){
- if (e.isCancelled()) {
- return;
- }
- ConfigLoad configLoad = new ConfigLoad();
- if (!configLoad.getAllowedSkillsMap().get("alchemy")) {
- return;
- }
- ItemGroups itemGroups = new ItemGroups();
- List harmfulEffects = itemGroups.getHarmfulEffects();
-
- ThrownPotion potionEntity = e.getPotion();
- if (!(potionEntity.getShooter() instanceof Player)) {
- return;
- }
- Player p = (Player) potionEntity.getShooter();
- if (p.getGameMode() == GameMode.CREATIVE) {
- return;
- }
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- int potionMasterLevel = (int) pStat.get("alchemy").get(13);
- if ((int)pStat.get("global").get(15) != 1) {
- potionMasterLevel = 0;
- }
- int potionDurationLevel = (int) pStat.get("alchemy").get(4);
- double durationMultiplier = potionDurationLevel*0.001 + 1;
- for (LivingEntity entity : e.getAffectedEntities()) {
- for (PotionEffect effect : e.getPotion().getEffects()) {
- if (p.equals(entity)) {
- if (harmfulEffects.contains(effect.getType())) {
- int finalPotionMasterLevel = potionMasterLevel;
- new BukkitRunnable() {
- @Override
- public void run() {
- if (entity.equals(p)) {
- if (!effect.getType().equals(PotionEffectType.HARM)) {
- entity.addPotionEffect(new PotionEffect(effect.getType(), (int) Math.round(effect.getDuration() * (1.0 / durationMultiplier)), effect.getAmplifier()), true);
- }
- }
- else if (!(entity instanceof Player)){
- if (!effect.getType().equals(PotionEffectType.HARM)) {
- entity.addPotionEffect(new PotionEffect(effect.getType(), (int) Math.round(effect.getDuration()*durationMultiplier), effect.getAmplifier()+ finalPotionMasterLevel), true);
- }
- else {
- if (finalPotionMasterLevel > 0) {
- entity.addPotionEffect(new PotionEffect(effect.getType(), 1, 0)); //Add 3 HP to whatever the damage was
- }
- }
- }
- else {
- if (configLoad.isAllowPvP()) {
- if (!effect.getType().equals(PotionEffectType.HARM)) {
- entity.addPotionEffect(new PotionEffect(effect.getType(), (int) Math.round(effect.getDuration()*durationMultiplier), effect.getAmplifier()+ finalPotionMasterLevel), true);
- }
- else {
- if (finalPotionMasterLevel > 0) {
- entity.addPotionEffect(new PotionEffect(effect.getType(), 1, 0)); //Add 3 HP to whatever the damage was
- }
- }
- }
- }
- }
- }.runTaskLater(plugin, 2);
- }
- else if (effect.getType().equals(PotionEffectType.HEAL)) {
- if (potionMasterLevel > 0) {
- entity.addPotionEffect(new PotionEffect(effect.getType(), 1, 0)); //Add 2 HP to whatever the healing was
- }
- }
- else {
- entity.addPotionEffect(new PotionEffect(effect.getType(), (int) Math.round(effect.getDuration() * durationMultiplier), effect.getAmplifier() + potionMasterLevel),true);
- }
- }
- else {
- entity.addPotionEffect(new PotionEffect(effect.getType(), (int) Math.round(effect.getDuration() * durationMultiplier), effect.getAmplifier() + potionMasterLevel),true);
- }
- }
- }
-
-
- }
-}
diff --git a/src/main/java/mc/carlton/freerpg/commands/CommandHelper.java b/src/main/java/mc/carlton/freerpg/commands/CommandHelper.java
index fb84b01..5d8b2b7 100644
--- a/src/main/java/mc/carlton/freerpg/commands/CommandHelper.java
+++ b/src/main/java/mc/carlton/freerpg/commands/CommandHelper.java
@@ -1,167 +1,184 @@
package mc.carlton.freerpg.commands;
-import mc.carlton.freerpg.gameTools.LanguageSelector;
+import mc.carlton.freerpg.utils.game.LanguageSelector;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class CommandHelper {
- /*
- * This class perform simple tests on common "properties" of a command to see if the user's input is valid.
- * It also provides feedback to the user via message when the inputs are incorrect,
- */
- private CommandSender sender;
- private String[] args;
- private int minArguments;
- private int maxArguments;
- private String permissionName;
- private boolean isPlayerOnlyCommand = false;
- private boolean checkInBed = false;
- private String improperArgumentsMessage;
- /**
- * Constructor for CommandHelper
- * @param sender CommandSender instance
- * @param args Arguments of command
- * @param minArguments The minimum number of allowed arguments
- * @param maxArguments The maximum number of allowed arguments (set to 0 for no restriciton)
- * @param improperArgumentsMessage The message to be displayed if the user fails a validity test of the command.
- * The message string can be formatted such that it can be decoded by
- * @see LanguageSelector#translateMessage(String)
- *
- */
- public CommandHelper(CommandSender sender, String[] args, int minArguments, int maxArguments, String improperArgumentsMessage) {
- this.sender = sender;
- this.args = args;
- this.minArguments = minArguments;
- this.maxArguments = maxArguments;
- this.improperArgumentsMessage = improperArgumentsMessage;
- }
+ /*
+ * This class perform simple tests on common "properties" of a command to see if the user's input is valid.
+ * It also provides feedback to the user via message when the inputs are incorrect,
+ */
+ private CommandSender sender;
+ private String[] args;
+ private int minArguments;
+ private int maxArguments;
+ private String permissionName;
+ private boolean isPlayerOnlyCommand = false;
+ private boolean checkInBed = false;
+ private String improperArgumentsMessage;
- /**
- * Constructor for CommandHelper
- * @param sender CommandSender instance
- * @param args Arguments of command
- * @param numberOfArguments The maximum number of allowed arguments (set to 0 for no restriciton)
- * @param improperArgumentsMessage The message to be displayed if the user fails a validity test of the command.
- * The message string can be formatted such that it can be decoded by
- * @see LanguageSelector#translateMessage(String)
- *
- */
- public CommandHelper(CommandSender sender, String[] args, int numberOfArguments, String improperArgumentsMessage) {
- this.sender = sender;
- this.args = args;
- this.minArguments = numberOfArguments;
- this.maxArguments = numberOfArguments;
- this.improperArgumentsMessage = improperArgumentsMessage;
- }
+ /**
+ * Constructor for CommandHelper
+ *
+ * @param sender CommandSender instance
+ * @param args Arguments of command
+ * @param minArguments The minimum number of allowed arguments
+ * @param maxArguments The maximum number of allowed arguments (set to 0 for no
+ * restriciton)
+ * @param improperArgumentsMessage The message to be displayed if the user fails a validity test
+ * of the command. The message string can be formatted such that
+ * it can be decoded by
+ * @see LanguageSelector#translateMessage(String)
+ */
+ public CommandHelper(CommandSender sender, String[] args, int minArguments, int maxArguments,
+ String improperArgumentsMessage) {
+ this.sender = sender;
+ this.args = args;
+ this.minArguments = minArguments;
+ this.maxArguments = maxArguments;
+ this.improperArgumentsMessage = improperArgumentsMessage;
+ }
- public void setPermissionName(String permissionName) {
- this.permissionName = permissionName;
- }
+ /**
+ * Constructor for CommandHelper
+ *
+ * @param sender CommandSender instance
+ * @param args Arguments of command
+ * @param numberOfArguments The maximum number of allowed arguments (set to 0 for no
+ * restriciton)
+ * @param improperArgumentsMessage The message to be displayed if the user fails a validity test
+ * of the command. The message string can be formatted such that
+ * it can be decoded by
+ * @see LanguageSelector#translateMessage(String)
+ */
+ public CommandHelper(CommandSender sender, String[] args, int numberOfArguments,
+ String improperArgumentsMessage) {
+ this.sender = sender;
+ this.args = args;
+ this.minArguments = numberOfArguments;
+ this.maxArguments = numberOfArguments;
+ this.improperArgumentsMessage = improperArgumentsMessage;
+ }
- public void setPlayerOnlyCommand(boolean isPlayerOnlyCommand) {
- this.isPlayerOnlyCommand = isPlayerOnlyCommand;
- }
+ public void setPermissionName(String permissionName) {
+ this.permissionName = permissionName;
+ }
- public void setCheckInBed(boolean checkInBed) {
- this.checkInBed = checkInBed;
- }
+ public void setPlayerOnlyCommand(boolean isPlayerOnlyCommand) {
+ this.isPlayerOnlyCommand = isPlayerOnlyCommand;
+ }
- /**
- * Checks if a command is properly sent
- * @return true if the command is "proper", i.e has a proper number of arguments, is cast by an allowed sender, the sender has the proper permissions,
- * and the sender is not in a bed (if restricted).
- */
- public boolean isProperCommand(){
- if (maxArguments > 0) { //Ignore argument restrictions if argument is less than 0
- if (!hasProperNumberOfArguments()) {
- return false; //Improper arguments
- }
- }
- if (isPlayerOnlyCommand) {
- if (!isPlayer()) {
- return false; //Not a player (player only command)
- }
- }
- if (!hasPermission()) {
- return false; //No permission
- }
- if (checkInBed) {
- if (isInBed()) {
- return false; //Cannot be in bed
- }
- }
- return true; //Passed all tests
- }
+ public void setCheckInBed(boolean checkInBed) {
+ this.checkInBed = checkInBed;
+ }
- /**
- * Checks if a player has permission to use a command and sends the player a message if they do not have permission
- * @return true if player has permission, false otherwise
- */
- public boolean hasPermission() {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- if (!p.hasPermission("freeRPG." + permissionName)) {
- LanguageSelector lang = new LanguageSelector(p);
- p.sendMessage(ChatColor.RED + lang.getString("noPermission"));
- return false;
- }
- }
- return true;
+ /**
+ * Checks if a command is properly sent
+ *
+ * @return true if the command is "proper", i.e has a proper number of arguments, is cast by an
+ * allowed sender, the sender has the proper permissions, and the sender is not in a bed (if
+ * restricted).
+ */
+ public boolean isProperCommand() {
+ if (maxArguments > 0) { //Ignore argument restrictions if argument is less than 0
+ if (!hasProperNumberOfArguments()) {
+ return false; //Improper arguments
+ }
}
+ if (isPlayerOnlyCommand) {
+ if (!isPlayer()) {
+ return false; //Not a player (player only command)
+ }
+ }
+ if (!hasPermission()) {
+ return false; //No permission
+ }
+ if (checkInBed) {
+ if (isInBed()) {
+ return false; //Cannot be in bed
+ }
+ }
+ return true; //Passed all tests
+ }
- /**
- * Checks if a player is in bed and sends the player a message if they are
- * @return true if player is in a bed
- */
- public boolean isInBed() {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- if (p.isSleeping()) {
- p.sendMessage(ChatColor.RED + lang.getString("bedGUI"));
- return true;
- }
- }
+ /**
+ * Checks if a player has permission to use a command and sends the player a message if they do
+ * not have permission
+ *
+ * @return true if player has permission, false otherwise
+ */
+ public boolean hasPermission() {
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ if (!p.hasPermission("freeRPG." + permissionName)) {
+ LanguageSelector lang = new LanguageSelector(p);
+ p.sendMessage(ChatColor.RED + lang.getString("noPermission"));
return false;
+ }
}
+ return true;
+ }
- /**
- * Checks if the CommandSender is a player and sends them a message if not
- * @return true if commandSender is a player
- */
- public boolean isPlayer() {
- if (sender instanceof Player) {
- return true;
- }
- sender.sendMessage("You must be a player to cast this command!");
- return false;
+ /**
+ * Checks if a player is in bed and sends the player a message if they are
+ *
+ * @return true if player is in a bed
+ */
+ public boolean isInBed() {
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ if (p.isSleeping()) {
+ p.sendMessage(ChatColor.RED + lang.getString("bedGUI"));
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Checks if the CommandSender is a player and sends them a message if not
+ *
+ * @return true if commandSender is a player
+ */
+ public boolean isPlayer() {
+ if (sender instanceof Player) {
+ return true;
}
+ sender.sendMessage("You must be a player to cast this command!");
+ return false;
+ }
- /**
- * Checks if the command has the proper number of arguments and sends a message to the sender if not
- * @return true if the command has a proper number of arguments
- */
- public boolean hasProperNumberOfArguments() {
- if (minArguments <= args.length && args.length <= maxArguments) {
- return true;
- } else {
- sendImproperArgumentsMessage();
- return false;
- }
+ /**
+ * Checks if the command has the proper number of arguments and sends a message to the sender if
+ * not
+ *
+ * @return true if the command has a proper number of arguments
+ */
+ public boolean hasProperNumberOfArguments() {
+ if (minArguments <= args.length && args.length <= maxArguments) {
+ return true;
+ } else {
+ sendImproperArgumentsMessage();
+ return false;
}
+ }
- /**
- * Sends an "Improper Arguments" message to the player.
- */
- public void sendImproperArgumentsMessage() {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- p.sendMessage(ChatColor.RED +lang.getString("improperArguments")+lang.translateMessage(improperArgumentsMessage));
- } else {
- sender.sendMessage("Improper Arugments, try " + LanguageSelector.getEnglishMessage(improperArgumentsMessage));
- }
+ /**
+ * Sends an "Improper Arguments" message to the player.
+ */
+ public void sendImproperArgumentsMessage() {
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ p.sendMessage(ChatColor.RED + lang.getString("improperArguments") + lang.translateMessage(
+ improperArgumentsMessage));
+ } else {
+ sender.sendMessage("Improper Arguments, try " + LanguageSelector.getEnglishMessage(
+ improperArgumentsMessage));
}
+ }
}
diff --git a/src/main/java/mc/carlton/freerpg/commands/FrpgCommands.java b/src/main/java/mc/carlton/freerpg/commands/FrpgCommands.java
index 3de277f..8a54655 100644
--- a/src/main/java/mc/carlton/freerpg/commands/FrpgCommands.java
+++ b/src/main/java/mc/carlton/freerpg/commands/FrpgCommands.java
@@ -1,21 +1,36 @@
package mc.carlton.freerpg.commands;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.UUID;
import mc.carlton.freerpg.FreeRPG;
+import mc.carlton.freerpg.config.ConfigLoad;
+import mc.carlton.freerpg.core.info.player.AbilityTimers;
+import mc.carlton.freerpg.core.info.player.ChangeStats;
+import mc.carlton.freerpg.core.info.player.Leaderboards;
+import mc.carlton.freerpg.core.info.player.OfflinePlayerStatLoadIn;
+import mc.carlton.freerpg.core.info.player.PlayerLeaderboardStat;
+import mc.carlton.freerpg.core.info.player.PlayerStats;
+import mc.carlton.freerpg.core.info.player.PlayerStatsLoadIn;
+import mc.carlton.freerpg.core.serverFileManagement.PeriodicSaving;
+import mc.carlton.freerpg.core.serverFileManagement.PlayerStatsFilePreparation;
import mc.carlton.freerpg.customContainers.collections.OldCustomRecipe;
-import mc.carlton.freerpg.gameTools.LanguageSelector;
-import mc.carlton.freerpg.gameTools.PsuedoEnchanting;
-import mc.carlton.freerpg.globalVariables.CraftingRecipes;
-import mc.carlton.freerpg.globalVariables.ItemGroups;
-import mc.carlton.freerpg.globalVariables.StringsAndOtherData;
-import mc.carlton.freerpg.guiTools.GuiDisplayStatistic;
-import mc.carlton.freerpg.guiTools.GuiItem;
-import mc.carlton.freerpg.guiTools.GuiWrapper;
-import mc.carlton.freerpg.perksAndAbilities.Agility;
-import mc.carlton.freerpg.playerInfo.*;
-import mc.carlton.freerpg.serverFileManagement.PeriodicSaving;
-import mc.carlton.freerpg.serverFileManagement.PlayerStatsFilePreparation;
-import mc.carlton.freerpg.configStorage.ConfigLoad;
-import mc.carlton.freerpg.utilities.UtilityMethods;
+import mc.carlton.freerpg.skills.perksAndAbilities.Agility;
+import mc.carlton.freerpg.utils.UtilityMethods;
+import mc.carlton.freerpg.utils.game.LanguageSelector;
+import mc.carlton.freerpg.utils.game.PsuedoEnchanting;
+import mc.carlton.freerpg.utils.globalVariables.CraftingRecipes;
+import mc.carlton.freerpg.utils.globalVariables.ItemGroups;
+import mc.carlton.freerpg.utils.globalVariables.StringsAndOtherData;
+import mc.carlton.freerpg.utils.gui.GuiDisplayStatistic;
+import mc.carlton.freerpg.utils.gui.GuiItem;
+import mc.carlton.freerpg.utils.gui.GuiWrapper;
+import org.apache.logging.log4j.Level;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
@@ -30,3335 +45,3493 @@
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
-import java.io.File;
-import java.io.IOException;
-import java.util.*;
-
public class FrpgCommands implements CommandExecutor {
- private boolean isTargetOnline(Player target, CommandSender sender) {
- if (target == null) {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- p.sendMessage(ChatColor.RED + lang.getString("playerOffline"));
- }
- else {
- sender.sendMessage("Player not online");
- }
- return false;
- }
+ private boolean isTargetOnline(Player target, CommandSender sender) {
+ if (target == null) {
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ p.sendMessage(ChatColor.RED + lang.getString("playerOffline"));
+ } else {
+ sender.sendMessage("Player not online");
+ }
+ return false;
+ }
+ return true;
+ }
+
+ private int getArgumentAsInteger(String arg) {
+ int integerValueOfArg = 0;
+ try {
+ integerValueOfArg = Integer.valueOf(arg);
+ return integerValueOfArg;
+ } catch (NumberFormatException e) {
+ return Integer.MAX_VALUE; //This is a cheap trick; when we return max value, that's our way of saying "could not convert" without throwing error
+ }
+ }
+
+ private double getArgumentAsDouble(String arg) {
+ double doubleValueOfArg = 0;
+ try {
+ doubleValueOfArg = Double.valueOf(arg);
+ return doubleValueOfArg;
+ } catch (NumberFormatException e) {
+ return Double.MAX_VALUE; //This is a cheap trick; when we return max value, that's our way of saying "could not convert" without throwing error
+ }
+ }
+
+ private boolean togglePerk(String id, CommandSender sender, String[] args) {
+ String permission;
+ String langID;
+ String skillName;
+ int skillIndex;
+ int globalIndex;
+ switch (id) {
+ case "flintToggle":
+ permission = "toggleFlint";
+ langID = "diggingPerkTitle4";
+ skillName = "digging";
+ skillIndex = 11;
+ globalIndex = 12;
+ break;
+ case "flamePickToggle":
+ permission = "toggleFlamePick";
+ langID = "smeltingPerkTitle2";
+ skillName = "smelting";
+ skillIndex = 13;
+ globalIndex = 13;
+ break;
+ case "speedToggle":
+ permission = "toggleSpeed";
+ langID = "agilityPerkTitle2";
+ skillName = "agility";
+ skillIndex = 13;
+ globalIndex = 14;
+ break;
+ case "potionToggle":
+ permission = "togglePotion";
+ langID = "alchemyPerkTitle2";
+ skillName = "alchemy";
+ skillIndex = 13;
+ globalIndex = 15;
+ break;
+ case "grappleToggle":
+ permission = "toggleGrapple";
+ langID = "fishingPerkTitle4";
+ skillName = "fishing";
+ skillIndex = 11;
+ globalIndex = 16;
+ break;
+ case "hotRodToggle":
+ permission = "toggleHotRod";
+ langID = "fishingPerkTitle5";
+ skillName = "fishing";
+ skillIndex = 12;
+ globalIndex = 17;
+ break;
+ case "veinMinerToggle":
+ permission = "toggleVeinMiner";
+ langID = "miningPerkTitle4";
+ skillName = "mining";
+ skillIndex = 11;
+ globalIndex = 18;
+ break;
+ case "megaDigToggle":
+ permission = "toggleMegaDig";
+ langID = "diggingPerkTitle6";
+ skillName = "digging";
+ skillIndex = 13;
+ globalIndex = 19;
+ break;
+ case "leafBlowerToggle":
+ permission = "toggleLeafBlower";
+ langID = "woodcuttingPerkTitle5";
+ skillName = "woodcutting";
+ skillIndex = 12;
+ globalIndex = 26;
+ break;
+ case "holyAxeToggle":
+ permission = "toggleHolyAxe";
+ langID = "axeMasteryPerkTitle1";
+ skillName = "axeMastery";
+ skillIndex = 8;
+ globalIndex = 27;
+ break;
+ default:
return true;
}
- private int getArgumentAsInteger(String arg) {
- int integerValueOfArg = 0;
- try {
- integerValueOfArg = Integer.valueOf(arg);
- return integerValueOfArg;
- }
- catch (NumberFormatException e) {
- return Integer.MAX_VALUE; //This is a cheap trick; when we return max value, that's our way of saying "could not convert" without throwing error
- }
+
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg " + id;
+ CommandHelper commandHelper = new CommandHelper(sender, args, 1, 2,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setPermissionName(permission);
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player p = (Player) sender;
+
+ LanguageSelector lang = new LanguageSelector(p);
+ PlayerStats pStatClass = new PlayerStats(p);
+ Agility agility = new Agility(p);
+ Map>> statAll = pStatClass.getData();
+ Map> pStat = pStatClass.getPlayerData();
+ int level = (int) pStat.get(skillName).get(skillIndex);
+
+ if (level <= 0) {
+ p.sendMessage(
+ ChatColor.RED + lang.getString("unlockToggle") + " " + ChatColor.BOLD + lang.getString(
+ langID));
+ return true;
+ }
+ if (args.length == 1) {
+ int toggle = (int) pStat.get("global").get(globalIndex);
+ if (toggle > 0) {
+ p.sendMessage(ChatColor.RED + lang.getString(langID) + ": " + lang.getString("off0"));
+ pStat.get("global").set(globalIndex, 0);
+ if (id.equalsIgnoreCase("speedToggle")) {
+ agility.gracefulFeetEnd();
+ }
+ } else {
+ p.sendMessage(ChatColor.GREEN + lang.getString(langID) + ": " + lang.getString("on0"));
+ pStat.get("global").set(globalIndex, 1);
+ if (id.equalsIgnoreCase("speedToggle")) {
+ agility.gracefulFeetStart();
+ }
+ }
+ statAll.put(p.getUniqueId(), pStat);
+ pStatClass.setData(statAll);
+ } else if (args.length == 2) {
+ if (args[1].equalsIgnoreCase("off")) {
+ p.sendMessage(ChatColor.RED + lang.getString(langID) + ": " + lang.getString("off0"));
+ pStat.get("global").set(globalIndex, 0);
+ statAll.put(p.getUniqueId(), pStat);
+ pStatClass.setData(statAll);
+ if (id.equalsIgnoreCase("speedToggle")) {
+ agility.gracefulFeetEnd();
+ }
+ } else if (args[1].equalsIgnoreCase("on")) {
+ p.sendMessage(ChatColor.GREEN + lang.getString(langID) + ": " + lang.getString("on0"));
+ pStat.get("global").set(globalIndex, 1);
+ statAll.put(p.getUniqueId(), pStat);
+ pStatClass.setData(statAll);
+ if (id.equalsIgnoreCase("speedToggle")) {
+ agility.gracefulFeetStart();
+ }
+ } else {
+ commandHelper.sendImproperArgumentsMessage();
+ }
+ }
+ return true;
+ }
+
+ private void togglePerkSetGuiItem(String id, Player p, GuiWrapper gui) {
+ String langID;
+ int globalIndex;
+ int guiIndex = 28;
+ boolean enchanted = false;
+ Material icon;
+ switch (id) {
+ case "flintToggle":
+ langID = "diggingPerkTitle4";
+ globalIndex = 12;
+ icon = Material.FLINT;
+ break;
+ case "flamePickToggle":
+ langID = "smeltingPerkTitle2";
+ globalIndex = 13;
+ icon = Material.BLAZE_POWDER;
+ break;
+ case "speedToggle":
+ langID = "agilityPerkTitle2";
+ globalIndex = 14;
+ icon = Material.LEATHER_BOOTS;
+ break;
+ case "potionToggle":
+ langID = "alchemyPerkTitle2";
+ globalIndex = 15;
+ icon = Material.POTION;
+ break;
+ case "grappleToggle":
+ langID = "fishingPerkTitle4";
+ globalIndex = 16;
+ icon = Material.LEAD;
+ break;
+ case "hotRodToggle":
+ langID = "fishingPerkTitle5";
+ globalIndex = 17;
+ guiIndex = 29;
+ icon = Material.FISHING_ROD;
+ break;
+ case "veinMinerToggle":
+ langID = "miningPerkTitle4";
+ globalIndex = 18;
+ icon = Material.DIAMOND_PICKAXE;
+ break;
+ case "megaDigToggle":
+ langID = "diggingPerkTitle6";
+ globalIndex = 19;
+ guiIndex = 29;
+ icon = Material.DIAMOND_SHOVEL;
+ break;
+ case "leafBlowerToggle":
+ langID = "woodcuttingPerkTitle5";
+ globalIndex = 26;
+ icon = Material.OAK_LEAVES;
+ break;
+ case "holyAxeToggle":
+ langID = "axeMasteryPerkTitle1";
+ globalIndex = 27;
+ icon = Material.DIAMOND_AXE;
+ enchanted = true;
+ break;
+ default:
+ return;
}
- private double getArgumentAsDouble(String arg) {
- double doubleValueOfArg = 0;
- try {
- doubleValueOfArg = Double.valueOf(arg);
- return doubleValueOfArg;
- }
- catch (NumberFormatException e) {
- return Double.MAX_VALUE; //This is a cheap trick; when we return max value, that's our way of saying "could not convert" without throwing error
- }
- }
- private boolean togglePerk(String id,CommandSender sender,String[] args) {
- String permission;
- String langID;
- String skillName;
- int skillIndex;
- int globalIndex;
- switch (id) {
- case "flintToggle":
- permission = "toggleFlint";
- langID = "diggingPerkTitle4";
- skillName = "digging";
- skillIndex = 11;
- globalIndex = 12;
- break;
- case "flamePickToggle":
- permission = "toggleFlamePick";
- langID = "smeltingPerkTitle2";
- skillName = "smelting";
- skillIndex = 13;
- globalIndex = 13;
- break;
- case "speedToggle":
- permission = "toggleSpeed";
- langID = "agilityPerkTitle2";
- skillName = "agility";
- skillIndex = 13;
- globalIndex = 14;
- break;
- case "potionToggle":
- permission = "togglePotion";
- langID = "alchemyPerkTitle2";
- skillName = "alchemy";
- skillIndex = 13;
- globalIndex = 15;
- break;
- case "grappleToggle":
- permission = "toggleGrapple";
- langID = "fishingPerkTitle4";
- skillName = "fishing";
- skillIndex = 11;
- globalIndex = 16;
- break;
- case "hotRodToggle":
- permission = "toggleHotRod";
- langID = "fishingPerkTitle5";
- skillName = "fishing";
- skillIndex = 12;
- globalIndex = 17;
- break;
- case "veinMinerToggle":
- permission = "toggleVeinMiner";
- langID = "miningPerkTitle4";
- skillName = "mining";
- skillIndex = 11;
- globalIndex = 18;
- break;
- case "megaDigToggle":
- permission = "toggleMegaDig";
- langID = "diggingPerkTitle6";
- skillName = "digging";
- skillIndex = 13;
- globalIndex = 19;
- break;
- case "leafBlowerToggle":
- permission = "toggleLeafBlower";
- langID = "woodcuttingPerkTitle5";
- skillName = "woodcutting";
- skillIndex = 12;
- globalIndex = 26;
- break;
- case "holyAxeToggle":
- permission = "toggleHolyAxe";
- langID = "axeMasteryPerkTitle1";
- skillName = "axeMastery";
- skillIndex = 8;
- globalIndex = 27;
- break;
- default:
- return true;
- }
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg " +id;
- CommandHelper commandHelper = new CommandHelper(sender,args,1,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setPermissionName(permission);
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player p = (Player) sender;
+ String parsableName = "::" + langID + "::" + " " + "::toggle::";
+ addToggleButton(p, gui, parsableName, icon, guiIndex, globalIndex);
+ if (enchanted) {
+ gui.getItem(guiIndex).addEnchantmentGlow();
+ }
+ }
+
+ private String getExpToNextString(Player p, String skillName) {
+ ChangeStats getEXP = new ChangeStats(p);
+ PlayerStats pStatClass = new PlayerStats(p);
+ Map> pStat = pStatClass.getPlayerData();
+
+ int maxLevel = getEXP.getMaxLevel(skillName);
+ int EXP = pStat.get(skillName).get(1).intValue();
+ int level = pStat.get(skillName).get(0).intValue();
+
+ String EXPtoNextString;
+ if (level < maxLevel) {
+ int nextEXP = getEXP.getEXPfromLevel(level + 1);
+ int EXPtoNext = nextEXP - EXP;
+ EXPtoNextString = String.valueOf(EXPtoNext);
+ } else {
+ EXPtoNextString = "N/A";
+ }
+ return EXPtoNextString;
+ }
+
+ private int getTotalSkillTokens(Player p) {
+ PlayerStats pStatClass = new PlayerStats(p);
+ Map> pStat = pStatClass.getPlayerData();
+ int totalSkillTokens = 0;
+ for (String j : pStat.keySet()) {
+ if (!j.equalsIgnoreCase("global")) {
+ totalSkillTokens += pStat.get(j).get(3).intValue();
+ }
+ }
+ return totalSkillTokens;
+ }
+
+ private int getTotalPassiveTokens(Player p) {
+ PlayerStats pStatClass = new PlayerStats(p);
+ Map> pStat = pStatClass.getPlayerData();
+ int totalPassiveTokens = 0;
+ for (String j : pStat.keySet()) {
+ if (!j.equalsIgnoreCase("global")) {
+ totalPassiveTokens += pStat.get(j).get(2).intValue();
+ }
+ }
+ return totalPassiveTokens;
+ }
+
+ private void generateMainMenu(Player p) {
+ //Player Information and Leaderboard
+ LanguageSelector lang = new LanguageSelector(p);
+ PlayerStats pStatClass = new PlayerStats(p);
+ Map> pStat = pStatClass.getPlayerData();
+ Leaderboards leaderboards = new Leaderboards();
+ PlayerStats timeStats = new PlayerStats(p);
+
+ //Gui Set-up
+ GuiWrapper gui = new GuiWrapper(p, Bukkit.createInventory(p, 45, "Skills"));
+ String nameColor = ChatColor.AQUA.toString() + ChatColor.BOLD.toString();
+ String descriptionColor = ChatColor.GRAY.toString() + ChatColor.ITALIC.toString();
+ String statisticNameColor = ChatColor.GRAY.toString();
+ String statisticColor = ChatColor.BLUE.toString();
+
+ //Menu Options (Items)
+ GuiItem global = new GuiItem(Material.NETHER_STAR, 4, gui);
+ GuiItem digging = new GuiItem(Material.IRON_SHOVEL, 11, gui);
+ GuiItem woodcutting = new GuiItem(Material.IRON_AXE, 12, gui);
+ GuiItem mining = new GuiItem(Material.IRON_PICKAXE, 13, gui);
+ GuiItem farming = new GuiItem(Material.IRON_HOE, 14, gui);
+ GuiItem fishing = new GuiItem(Material.FISHING_ROD, 15, gui);
+ GuiItem archery = new GuiItem(Material.BOW, 20, gui);
+ GuiItem beastMastery = new GuiItem(Material.BONE, 21, gui);
+ GuiItem swords = new GuiItem(Material.IRON_SWORD, 22, gui);
+ GuiItem armor = new GuiItem(Material.IRON_CHESTPLATE, 23, gui);
+ GuiItem axes = new GuiItem(Material.GOLDEN_AXE, 24, gui);
+ GuiItem repair = new GuiItem(Material.ANVIL, 29, gui);
+ GuiItem agility = new GuiItem(Material.LEATHER_LEGGINGS, 30, gui);
+ GuiItem alchemy = new GuiItem(Material.POTION, 31, gui);
+ GuiItem smelting = new GuiItem(Material.COAL, 32, gui);
+ GuiItem enchanting = new GuiItem(Material.ENCHANTING_TABLE, 33, gui);
+ GuiItem info = new GuiItem(Material.MAP, 36, gui);
+ GuiItem configuration = new GuiItem(Material.REDSTONE, 44, gui);
+
+ GuiItem[] guiItems = {global, digging, woodcutting, mining, farming, fishing, archery,
+ beastMastery, swords, armor, axes, repair, agility, alchemy, smelting, enchanting, info,
+ configuration};
+ String[] labels = {lang.getString("global"), lang.getString("digging"),
+ lang.getString("woodcutting"), lang.getString("mining"), lang.getString("farming"),
+ lang.getString("fishing"), lang.getString("archery"), lang.getString("beastMastery"),
+ lang.getString("swordsmanship"), lang.getString("defense"), lang.getString("axeMastery"),
+ lang.getString("repair"), lang.getString("agility"), lang.getString("alchemy"),
+ lang.getString("smelting"), lang.getString("enchanting"), lang.getString("information"),
+ lang.getString("configuration")};
+ String[] labels0 = {"global", "digging", "woodcutting", "mining", "farming", "fishing",
+ "archery", "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility",
+ "alchemy", "smelting", "enchanting", "information", "configuration"};
+
+ for (int i = 0; i < guiItems.length; i++) {
+ GuiItem item = guiItems[i];
+ String translatedLabel = labels[i];
+ String label = labels0[i];
+ item.setName(translatedLabel);
+ item.setNameColor(nameColor);
+ if (i == 0) { //Global
+ int globalTokens = (int) pStat.get(labels0[i]).get(1);
+ int totalLevel = pStat.get("global").get(0).intValue();
+ int totalExperience = (int) pStat.get("global").get(29);
+ int totalPlayers = leaderboards.getLeaderboardSize("global");
+ int rank = leaderboards.getLeaderboardPosition(p, "global");
+
+ item.addStatistic(lang.getString("total") + " " + lang.getString("level"),
+ String.valueOf(totalLevel));
+ item.addStatistic(lang.getString("total") + " " + lang.getString("exp"),
+ String.valueOf(totalExperience));
+ item.addSpecialLoreLine(statisticNameColor + lang.getString("rank") + ": " + ChatColor.WHITE
+ + ChatColor.BOLD.toString() + "" + String.format("%,d", rank) + ChatColor.RESET
+ + descriptionColor + " " + lang.getString("outOf") + " " + ChatColor.RESET
+ + ChatColor.WHITE.toString() + totalPlayers);
+ if (globalTokens > 0) {
+ item.addEnchantmentGlow();
+ }
+
+ } else if (i < 16) { //Skills
+ String skillName = labels0[i];
+ int passiveTokens = (int) pStat.get(labels0[i]).get(2);
+ int skillTokens = (int) pStat.get(labels0[i]).get(3);
+ int level = pStat.get(labels0[i]).get(0).intValue();
+ int EXP = pStat.get(labels0[i]).get(1).intValue();
+ int totalPlayers = leaderboards.getLeaderboardSize(labels0[i]);
+ int rank = leaderboards.getLeaderboardPosition(p, labels0[i]);
+ String EXPtoNextString = getExpToNextString(p, skillName);
+
+ GuiDisplayStatistic levelStat = new GuiDisplayStatistic(lang.getString("level"), level,
+ ChatColor.GRAY.toString(), ChatColor.BLUE.toString());
+ GuiDisplayStatistic expStat = new GuiDisplayStatistic(lang.getString("experience"), EXP,
+ ChatColor.GRAY.toString(), ChatColor.BLUE.toString());
+ GuiDisplayStatistic expToLevelStat = new GuiDisplayStatistic(lang.getString("expToLevel"),
+ EXPtoNextString, ChatColor.GRAY.toString(), ChatColor.GREEN.toString());
+
+ item.addStatistic(levelStat);
+ item.addStatistic(expStat);
+ item.addStatistic(expToLevelStat);
+ item.addSpecialLoreLine(statisticNameColor + lang.getString("rank") + ": " + ChatColor.WHITE
+ + ChatColor.BOLD.toString() + "" + String.format("%,d", rank) + ChatColor.RESET
+ + descriptionColor + " " + lang.getString("outOf") + " " + ChatColor.RESET
+ + ChatColor.WHITE.toString() + totalPlayers);
+ if (passiveTokens > 0 || skillTokens > 0) {
+ item.addEnchantmentGlow();
+ }
+
+ } else if (i == 16) { //Information
+ int totalSkillTokens = getTotalSkillTokens(p);
+ int totalPassiveTokens = getTotalPassiveTokens(p);
+ int globalTokens = pStat.get("global").get(1).intValue();
+ String playTimeString = timeStats.getPlayerPlayTimeString();
+ double personalMultiplier = (double) pStat.get("global").get(23);
+ int souls = (int) pStat.get("global").get(20);
+
+ item.addStatistic(lang.getString("totalPlayTime"), playTimeString);
+ item.addStatistic(lang.getString("personalMultiplier"),
+ String.valueOf(personalMultiplier) + "x");
+ item.addStatistic(lang.getString("globalPassiveTitle0"), globalTokens);
+ item.addStatistic(lang.getString("diggingPassiveTitle2"), totalSkillTokens);
+ item.addStatistic(lang.getString("diggingPassiveTitle0"), totalPassiveTokens);
+ item.addStatistic(UtilityMethods.capitalizeString(lang.getString("souls")), souls);
+ } else if (i == 17) {//Configuration
+ item.setDescription(lang.getString("clickForOptions"));
+ }
+ gui.addItem(item);
+ }
- LanguageSelector lang = new LanguageSelector(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Agility agility = new Agility(p);
- Map>> statAll = pStatClass.getData();
- Map> pStat = pStatClass.getPlayerData();
- int level = (int)pStat.get(skillName).get(skillIndex);
-
- if (level <= 0) {
- p.sendMessage(ChatColor.RED + lang.getString("unlockToggle") + " " +ChatColor.BOLD + lang.getString(langID));
- return true;
- }
- if (args.length == 1) {
- int toggle = (int) pStat.get("global").get(globalIndex);
- if (toggle > 0) {
- p.sendMessage(ChatColor.RED + lang.getString(langID) + ": " + lang.getString("off0"));
- pStat.get("global").set(globalIndex,0);
- if (id.equalsIgnoreCase("speedToggle")) {
- agility.gracefulFeetEnd();
- }
- }
- else {
- p.sendMessage(ChatColor.GREEN + lang.getString(langID) + ": " + lang.getString("on0"));
- pStat.get("global").set(globalIndex,1);
- if (id.equalsIgnoreCase("speedToggle")) {
- agility.gracefulFeetStart();
- }
- }
- statAll.put(p.getUniqueId(), pStat);
- pStatClass.setData(statAll);
- } else if (args.length == 2) {
- if (args[1].equalsIgnoreCase("off")) {
- p.sendMessage(ChatColor.RED + lang.getString(langID) + ": " + lang.getString("off0"));
- pStat.get("global").set(globalIndex,0);
- statAll.put(p.getUniqueId(), pStat);
- pStatClass.setData(statAll);
- if (id.equalsIgnoreCase("speedToggle")) {
- agility.gracefulFeetEnd();
- }
- }
- else if (args[1].equalsIgnoreCase("on")) {
- p.sendMessage(ChatColor.GREEN + lang.getString(langID) + ": " + lang.getString("on0"));
- pStat.get("global").set(globalIndex,1);
- statAll.put(p.getUniqueId(), pStat);
- pStatClass.setData(statAll);
- if (id.equalsIgnoreCase("speedToggle")) {
- agility.gracefulFeetStart();
- }
- }
- else {
- commandHelper.sendImproperArgumentsMessage();
- }
- }
- return true;
+ //Put the items in the inventory
+ gui.displayGuiForPlayer();
+ }
+
+ private void messagePlayerHelpScreen(CommandSender sender, int page) {
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ final int TOTAL_PAGES = 4;
+ if (page > TOTAL_PAGES || page < 1) {
+ page = 1; //Page input out of bounds
+ }
+ p.sendMessage(
+ ChatColor.RED + "------| " + ChatColor.GREEN + ChatColor.BOLD.toString() + " Help" +
+ ChatColor.RESET + ChatColor.GREEN.toString() + " " + lang.getString("page") + " ["
+ + Integer.toString(page) + "/" + Integer.toString(TOTAL_PAGES) + "]" +
+ ChatColor.RED.toString() + " |-----");
+ switch (page) {
+ case 1:
+ p.sendMessage(
+ ChatColor.GOLD + "/frpg" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc0"));
+ p.sendMessage(ChatColor.GOLD + "/frpg skillTreeGUI [" + lang.getString("skillName") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc1"));
+ p.sendMessage(ChatColor.GOLD + "/frpg configurationGUI" + ChatColor.RESET
+ + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc2"));
+ p.sendMessage(ChatColor.GOLD + "/frpg giveEXP [" + lang.getString("playerName") + "] ["
+ + lang.getString("skillName") + "] [amount]" + ChatColor.RESET
+ + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc3"));
+ p.sendMessage(ChatColor.GOLD + "/frpg setLevel [" + lang.getString("playerName") + "] ["
+ + lang.getString("skillName") + "] [" + lang.getString("level") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc4"));
+ p.sendMessage(ChatColor.GOLD + "/frpg statReset [" + lang.getString("playerName") + "] ["
+ + lang.getString("skillName") + "]" + ChatColor.RESET + ChatColor.GRAY.toString()
+ + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc5"));
+ p.sendMessage(ChatColor.GOLD + "/frpg statLeaders [" + lang.getString("skillName") + "] ["
+ + lang.getString("page") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc6"));
+ p.sendMessage(
+ ChatColor.GOLD + "/frpg info" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc7"));
+ break;
+ case 2:
+ p.sendMessage(ChatColor.GOLD + "/frpg flintToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("diggingPerkTitle4"));
+ p.sendMessage(ChatColor.GOLD + "/frpg speedToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("agilityPerkTitle2"));
+ p.sendMessage(ChatColor.GOLD + "/frpg potionToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("alchemyPerkTitle2"));
+ p.sendMessage(ChatColor.GOLD + "/frpg flamePickToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("smeltingPerkTitle2"));
+ p.sendMessage(ChatColor.GOLD + "/frpg grappleToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("fishingPerkTitle4"));
+ p.sendMessage(ChatColor.GOLD + "/frpg hotRodToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("fishingPerkTitle5"));
+ p.sendMessage(ChatColor.GOLD + "/frpg veinMinerToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("miningPerkTitle4"));
+ p.sendMessage(ChatColor.GOLD + "/frpg megaDigToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("diggingPerkTitle6"));
+ break;
+ case 3:
+ p.sendMessage(
+ ChatColor.GOLD + "/frpg leafBlowerToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("woodcuttingPerkTitle5"));
+ p.sendMessage(ChatColor.GOLD + "/frpg holyAxeToggle [" + lang.getString("onOrOff") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " "
+ + lang.getString("axeMasteryPerkTitle1"));
+ p.sendMessage(ChatColor.GOLD + "/frpg enchantItem [" + lang.getString("level") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc8"));
+ p.sendMessage(
+ ChatColor.GOLD + "/frpg setSouls" + " [" + lang.getString("playerName") + "]" + " ["
+ + lang.getString("amount") + "]" + ChatColor.RESET + ChatColor.GRAY.toString()
+ + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc9"));
+ p.sendMessage(
+ ChatColor.GOLD + "/frpg setTokens" + " [" + lang.getString("playerName") + "]" + " ["
+ + lang.getString("skillName") + "]" + " [skill/passive]" + " [" + lang.getString(
+ "amount") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc10"));
+ p.sendMessage(
+ ChatColor.GOLD + "/frpg setTokens" + " [" + lang.getString("playerName") + "]"
+ + " global" + " [" + lang.getString("amount") + "]" + ChatColor.RESET
+ + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc11"));
+ p.sendMessage(ChatColor.GOLD + "/frpg saveStats [" + lang.getString("playerName") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc12"));
+ p.sendMessage(
+ ChatColor.GOLD + "/frpg setMultiplier [" + lang.getString("playerName") + "] " + "["
+ + lang.getString("amount") + "]" + ChatColor.RESET + ChatColor.GRAY.toString()
+ + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc13"));
+ break;
+ case 4:
+ p.sendMessage(
+ ChatColor.GOLD + "/frpg resetCooldown [" + lang.getString("playerName") + "] ["
+ + lang.getString("skillName") + "]" + ChatColor.RESET + ChatColor.GRAY.toString()
+ + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc14"));
+ p.sendMessage(ChatColor.GOLD + "/frpg statLookup [" + lang.getString("playerName") + "]"
+ + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc15"));
+ p.sendMessage(
+ ChatColor.GOLD + "/frpg changeMultiplier [" + lang.getString("playerName") + "] "
+ + "[" + lang.getString("expIncrease") + "]" + ChatColor.RESET
+ + ChatColor.GRAY.toString() + " - " +
+ ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc16"));
+ default:
+ break;
+ }
}
- private void togglePerkSetGuiItem(String id, Player p, GuiWrapper gui) {
- String langID;
- int globalIndex;
- int guiIndex = 28;
- boolean enchanted = false;
- Material icon;
- switch (id) {
- case "flintToggle":
- langID = "diggingPerkTitle4";
- globalIndex = 12;
- icon = Material.FLINT;
- break;
- case "flamePickToggle":
- langID = "smeltingPerkTitle2";
- globalIndex = 13;
- icon = Material.BLAZE_POWDER;
- break;
- case "speedToggle":
- langID = "agilityPerkTitle2";
- globalIndex = 14;
- icon = Material.LEATHER_BOOTS;
- break;
- case "potionToggle":
- langID = "alchemyPerkTitle2";
- globalIndex = 15;
- icon = Material.POTION;
- break;
- case "grappleToggle":
- langID = "fishingPerkTitle4";
- globalIndex = 16;
- icon = Material.LEAD;
- break;
- case "hotRodToggle":
- langID = "fishingPerkTitle5";
- globalIndex = 17;
- guiIndex = 29;
- icon = Material.FISHING_ROD;
- break;
- case "veinMinerToggle":
- langID = "miningPerkTitle4";
- globalIndex = 18;
- icon = Material.DIAMOND_PICKAXE;
- break;
- case "megaDigToggle":
- langID = "diggingPerkTitle6";
- globalIndex = 19;
- guiIndex = 29;
- icon = Material.DIAMOND_SHOVEL;
- break;
- case "leafBlowerToggle":
- langID = "woodcuttingPerkTitle5";
- globalIndex = 26;
- icon = Material.OAK_LEAVES;
- break;
- case "holyAxeToggle":
- langID = "axeMasteryPerkTitle1";
- globalIndex = 27;
- icon = Material.DIAMOND_AXE;
- enchanted = true;
- break;
- default:
- return;
+ }
+
+ private void createLeaderboard(CommandSender sender, int page, String skillName) {
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy",
+ "smelting", "enchanting", "global", "playTime"};
+ List labels_arr = Arrays.asList(labels_0);
+
+ Leaderboards getStats = new Leaderboards();
+ if (!getStats.isLeaderboardsLoaded()) {
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ p.sendMessage(ChatColor.RED + "Leaderboard is not yet loaded, try again soon");
+ } else {
+ sender.sendMessage("Leaderboard is not yet loaded, try again soon");
+ }
+ }
+ //Sorts and Updates leaderboard (if dynamic updates are on)
+ getStats.sortLeaderBoard(skillName);
+
+ ArrayList sortedStats = getStats.getLeaderboard(skillName);
+ int totalPlayers = sortedStats.size();
+ int totalPages = (int) Math.ceil(totalPlayers / 10.0);
+ if (page > totalPages) {
+ page = 1;
+ }
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ String[] titles_0 = {lang.getString("digging"), lang.getString("woodcutting"),
+ lang.getString("mining"), lang.getString("farming"),
+ lang.getString("fishing"), lang.getString("archery"), lang.getString("beastMastery"),
+ lang.getString("swordsmanship"),
+ lang.getString("defense"), lang.getString("axeMastery"), lang.getString("repair"),
+ lang.getString("agility"), lang.getString("alchemy"),
+ lang.getString("smelting"), lang.getString("enchanting"), lang.getString("global"),
+ lang.getString("totalPlayTime")};
+ String skillTitle = titles_0[labels_arr.indexOf(skillName)];
+ p.sendMessage(
+ ChatColor.AQUA + "------| " + ChatColor.WHITE + ChatColor.BOLD.toString() + skillTitle
+ + " " + lang.getString("leaderboard") + "" +
+ ChatColor.RESET + ChatColor.WHITE.toString() + " " + lang.getString("page") + " ["
+ + Integer.toString(page) + "/" + Integer.toString(totalPages) + "]" +
+ ChatColor.AQUA.toString() + " |-----");
+ for (int i = 10 * (page - 1); i < (int) Math.min(10 * page, totalPlayers); i++) {
+ PlayerLeaderboardStat info = sortedStats.get(i);
+ if (skillName.equalsIgnoreCase("global")) {
+ p.sendMessage(
+ ChatColor.WHITE + Integer.toString(i + 1) + ". " + ChatColor.AQUA + info.get_pName()
+ + ChatColor.WHITE.toString() + " - " + ChatColor.WHITE + String.format("%,d",
+ info.get_sortedStat()) + ChatColor.WHITE + " (" + ChatColor.GRAY + String.format(
+ "%,d", info.get_stat2()) + ChatColor.WHITE + ")");
+ } else if (skillName.equalsIgnoreCase("playTime")) {
+ p.sendMessage(
+ ChatColor.WHITE + Integer.toString(i + 1) + ". " + ChatColor.AQUA + info.get_pName()
+ + ChatColor.WHITE.toString() + " - " + ChatColor.WHITE
+ + info.get_playTimeString());
+ } else {
+ p.sendMessage(
+ ChatColor.WHITE + Integer.toString(i + 1) + ". " + ChatColor.AQUA + info.get_pName()
+ + ChatColor.WHITE.toString() + " - " + ChatColor.WHITE + String.format("%,d",
+ info.get_stat2()) + ChatColor.WHITE + " (" + ChatColor.GRAY + String.format("%,d",
+ info.get_sortedStat()) + ChatColor.WHITE + ")");
+ }
+ }
+ } else {
+ String[] titles_0 = {"Digging", "Woodcutting", "Mining", "Farming", "Fishing", "Archery",
+ "Beast Mastery", "Swordsmanship", "Defense", "Axe Mastery", "Repair", "Agility",
+ "Alchemy", "Smelting", "Enchanting", "Global"};
+ String skillTitle = titles_0[labels_arr.indexOf(skillName)];
+ sender.sendMessage(
+ "------| " + skillTitle + " Leaderboard" + " Page [" + Integer.toString(page) + "/"
+ + Integer.toString(totalPages) + "]" + " |-----");
+ for (int i = 10 * (page - 1); i < (int) Math.min(10 * page, totalPlayers); i++) {
+ PlayerLeaderboardStat info = sortedStats.get(i);
+ if (skillName.equalsIgnoreCase("global")) {
+ sender.sendMessage(
+ Integer.toString(i + 1) + ". " + info.get_pName() + " - " + Integer.toString(
+ (int) info.get_sortedStat()) + " (" + info.get_stat2() + ")");
+ } else if (skillName.equalsIgnoreCase("playTime")) {
+ sender.sendMessage(Integer.toString(i + 1) + ". " + info.get_pName() + " - "
+ + info.get_playTimeString());
+ } else {
+ sender.sendMessage(
+ Integer.toString(i + 1) + ". " + info.get_pName() + " - " + Integer.toString(
+ (int) info.get_stat2()) + " (" + info.get_sortedStat() + ")");
}
- String parsableName = "::"+langID+"::" + " " + "::toggle::";
- addToggleButton(p,gui,parsableName,icon,guiIndex,globalIndex);
- if (enchanted) {
- gui.getItem(guiIndex).addEnchantmentGlow();
+ }
+ }
+ }
+
+ private void createStatLookup(CommandSender sender, String playerName) {
+ Leaderboards leaderboards = new Leaderboards();
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ List leaderboardNames = leaderboards.getLeaderboardNames();
+ p.sendMessage(
+ ChatColor.AQUA + "--------| " + ChatColor.WHITE + ChatColor.BOLD.toString() + playerName
+ + ChatColor.RESET + ChatColor.WHITE.toString() + " " + lang.getString("stats") +
+ ChatColor.AQUA.toString() + " |-------");
+ StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
+ for (String leaderboardName : leaderboardNames) {
+ int rank = leaderboards.getLeaderboardPosition(playerName, leaderboardName);
+ PlayerLeaderboardStat playerStat = leaderboards.getPlayerStat(playerName, leaderboardName);
+ String displayedStat;
+ String displayTitle;
+ String rankString = UtilityMethods.intToRankingString(rank);
+ if (rankString.equals("1st")) {
+ rankString = ChatColor.YELLOW + rankString;
+ } else if (rankString.equals("2nd")) {
+ rankString = ChatColor.WHITE + rankString;
+ } else if (rankString.equals("3rd")) {
+ rankString = ChatColor.GOLD + rankString;
+ } else {
+ rankString = ChatColor.GRAY + rankString;
+ }
+ if (leaderboardName.equalsIgnoreCase("playTime")) {
+ displayedStat = playerStat.get_playTimeString();
+ displayTitle = "Play Time";
+ } else if (leaderboardName.equalsIgnoreCase("global")) {
+ displayedStat = String.format("%,d", playerStat.get_sortedStat());
+ displayTitle = "Global Level";
+ } else {
+ displayedStat = String.format("%,d", playerStat.get_stat2());
+ displayTitle = stringsAndOtherData.camelCaseToTitle(leaderboardName);
+ }
+ p.sendMessage(ChatColor.AQUA + ChatColor.BOLD.toString() + displayTitle + ChatColor.RESET
+ + ChatColor.GRAY.toString() + " - " +
+ ChatColor.WHITE + displayedStat + " (" + rankString + ChatColor.WHITE + ")");
+ }
+
+ } else {
+ List leaderboardNames = leaderboards.getLeaderboardNames();
+ sender.sendMessage("--------| " + playerName + " stats |-------");
+ StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
+ for (String leaderboardName : leaderboardNames) {
+ int rank = leaderboards.getLeaderboardPosition(playerName, leaderboardName);
+ PlayerLeaderboardStat playerStat = leaderboards.getPlayerStat(playerName, leaderboardName);
+ String displayedStat;
+ String displayTitle;
+ String rankString = UtilityMethods.intToRankingString(rank);
+ if (leaderboardName.equalsIgnoreCase("playTime")) {
+ displayedStat = playerStat.get_playTimeString();
+ displayTitle = "Play Time";
+ } else if (leaderboardName.equalsIgnoreCase("global")) {
+ displayedStat = String.format("%,d", playerStat.get_sortedStat());
+ displayTitle = "Global Level";
+ } else {
+ displayedStat = String.format("%,d", playerStat.get_stat2());
+ displayTitle = stringsAndOtherData.camelCaseToTitle(leaderboardName);
}
+ sender.sendMessage(displayTitle + " - " + displayedStat + " (" + rankString + ")");
+ }
+ }
+ }
+
+ private void addToggleButton(Player p, GuiWrapper gui, String parseableName,
+ Material iconItemType, int iconPosition, int toggleIndex) {
+ LanguageSelector lang = new LanguageSelector(p);
+ PlayerStats pStatClass = new PlayerStats(p);
+ Map> pStat = pStatClass.getPlayerData();
+
+ GuiItem guiItem = new GuiItem(iconItemType, iconPosition, gui);
+ guiItem.setName(lang.translateMessage(parseableName));
+ gui.addItem(guiItem);
+
+ GuiItem guiItemToggle = new GuiItem(Material.LIME_DYE, iconPosition + 9, gui);
+ if ((int) pStat.get("global").get(toggleIndex) > 0) {
+ guiItemToggle.setNameColor(ChatColor.BOLD + ChatColor.GREEN.toString());
+ guiItemToggle.setName(lang.getString("on0"));
+ } else {
+ guiItemToggle.setItemType(Material.GRAY_DYE);
+ guiItemToggle.setNameColor(ChatColor.BOLD + ChatColor.RED.toString());
+ guiItemToggle.setName(lang.getString("off0"));
+ }
+ gui.addItem(guiItemToggle);
+ }
+
+ private void addToggleButton(Player p, GuiWrapper gui, String parseableName,
+ Material iconItemType, int iconPosition, boolean toggleCondition) {
+ LanguageSelector lang = new LanguageSelector(p);
+ PlayerStats pStatClass = new PlayerStats(p);
+
+ GuiItem guiItem = new GuiItem(iconItemType, iconPosition, gui);
+ guiItem.setName(lang.translateMessage(parseableName));
+ gui.addItem(guiItem);
+
+ GuiItem guiItemToggle = new GuiItem(Material.LIME_DYE, iconPosition + 9, gui);
+ if (toggleCondition) {
+ guiItemToggle.setNameColor(ChatColor.BOLD + ChatColor.GREEN.toString());
+ guiItemToggle.setName(lang.getString("on0"));
+ } else {
+ guiItemToggle.setItemType(Material.GRAY_DYE);
+ guiItemToggle.setNameColor(ChatColor.BOLD + ChatColor.RED.toString());
+ guiItemToggle.setName(lang.getString("off0"));
+ }
+ gui.addItem(guiItemToggle);
+ }
+
+ private void setTranslatedSkillTreeInformation(Player p, String skillName,
+ Map perksMap, Map descriptionsMap,
+ Map passivePerksMap, Map passiveDescriptionsMap) {
+ LanguageSelector lang = new LanguageSelector(p);
+ String[] newTitles = perksMap.get(skillName);
+ String[] newDescs = descriptionsMap.get(skillName);
+ String[] newPassiveTitles = passivePerksMap.get(skillName);
+ String[] newPassiveDescs = passiveDescriptionsMap.get(skillName);
+ int i = 0;
+ for (String title : perksMap.get(skillName)) {
+ String id = skillName + "PerkTitle" + i;
+ newTitles[i] = lang.getString(id);
+ i += 1;
+ }
+ i = 0;
+ for (String desc : descriptionsMap.get(skillName)) {
+ String id = skillName + "PerkDesc" + i;
+ newDescs[i] = lang.getString(id);
+ i += 1;
+ }
+ i = 0;
+ for (String passiveTitle : passivePerksMap.get(skillName)) {
+ String id = skillName + "PassiveTitle" + i;
+ newPassiveTitles[i] = lang.getString(id);
+ i += 1;
+ }
+ i = 0;
+ for (String passiveDesc : passiveDescriptionsMap.get(skillName)) {
+ String id = skillName + "PassiveDesc" + i;
+ newPassiveDescs[i] = lang.getString(id);
+ i += 1;
+ }
+ perksMap.put(skillName, newTitles);
+ descriptionsMap.put(skillName, newDescs);
+ passivePerksMap.put(skillName, newPassiveTitles);
+ passiveDescriptionsMap.put(skillName, newPassiveDescs);
+ }
+
+ private void setSkillTreeProgressMainSkill(Player p, String skillName, GuiWrapper gui) {
+ PlayerStats pStatClass = new PlayerStats(p);
+ Map> pStatAll = pStatClass.getPlayerData();
+ ArrayList pStats = pStatAll.get(skillName);
+ Integer[] indices = {11, 29, 13, 31, 7, 43, 26};
+ int skill_1a_level = (Integer) pStats.get(7);
+ int skill_1b_level = (Integer) pStats.get(8);
+ int skill_2a_level = (Integer) pStats.get(9);
+ int skill_2b_level = (Integer) pStats.get(10);
+ int skill_3a_level = (Integer) pStats.get(11);
+ int skill_3b_level = (Integer) pStats.get(12);
+ int skill_M_level = (Integer) pStats.get(13);
+
+ GuiItem skill_1a = new GuiItem(Material.PINK_TERRACOTTA, 11, gui);
+ GuiItem skill_2a = new GuiItem(Material.RED_TERRACOTTA, 13, gui);
+ GuiItem skill_3a = new GuiItem(Material.RED_TERRACOTTA, 7, gui);
+ GuiItem skill_1b = new GuiItem(Material.PINK_TERRACOTTA, 29, gui);
+ GuiItem skill_2b = new GuiItem(Material.RED_TERRACOTTA, 31, gui);
+ GuiItem skill_3b = new GuiItem(Material.RED_TERRACOTTA, 43, gui);
+ GuiItem skill_M = new GuiItem(Material.RED_TERRACOTTA, 26, gui);
+
+ if (skill_1a_level == 0) {
+ skill_1a.setItemType(Material.PINK_TERRACOTTA);
+ } else if (skill_1a_level > 0 && skill_1a_level < 5) {
+ skill_1a.setItemType(Material.YELLOW_TERRACOTTA);
+ } else {
+ skill_1a.setItemType(Material.GREEN_TERRACOTTA);
}
- private String getExpToNextString(Player p,String skillName) {
- ChangeStats getEXP = new ChangeStats(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- int maxLevel = getEXP.getMaxLevel(skillName);
- int EXP = pStat.get(skillName).get(1).intValue();
- int level = pStat.get(skillName).get(0).intValue();
+ if (skill_1b_level == 0) {
+ skill_1b.setItemType(Material.PINK_TERRACOTTA);
+ } else if (skill_1b_level > 0 && skill_1b_level < 5) {
+ skill_1b.setItemType(Material.YELLOW_TERRACOTTA);
+ } else {
+ skill_1b.setItemType(Material.GREEN_TERRACOTTA);
+ }
- String EXPtoNextString;
- if (level < maxLevel) {
- int nextEXP = getEXP.getEXPfromLevel(level+1);
- int EXPtoNext = nextEXP - EXP;
- EXPtoNextString = String.valueOf(EXPtoNext);
- }
- else {
- EXPtoNextString = "N/A";
- }
- return EXPtoNextString;
+ if (skill_2a_level == 0) {
+ if (skill_1a_level >= 2) {
+ skill_2a.setItemType(Material.PINK_TERRACOTTA);
+ }
+ } else if (skill_2a_level > 0 && skill_2a_level < 5) {
+ skill_2a.setItemType(Material.YELLOW_TERRACOTTA);
+ } else {
+ skill_2a.setItemType(Material.GREEN_TERRACOTTA);
}
- private int getTotalSkillTokens(Player p) {
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- int totalSkillTokens = 0;
- for (String j : pStat.keySet()){
- if (!j.equalsIgnoreCase("global")){
- totalSkillTokens += pStat.get(j).get(3).intValue();
- }
- }
- return totalSkillTokens;
+
+ if (skill_2b_level == 0) {
+ if (skill_1b_level >= 2) {
+ skill_2b.setItemType(Material.PINK_TERRACOTTA);
+ }
+ } else if (skill_2b_level > 0 && skill_2b_level < 5) {
+ skill_2b.setItemType(Material.YELLOW_TERRACOTTA);
+ } else {
+ skill_2b.setItemType(Material.GREEN_TERRACOTTA);
}
- private int getTotalPassiveTokens(Player p) {
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- int totalPassiveTokens = 0;
- for (String j : pStat.keySet()){
- if (!j.equalsIgnoreCase("global")){
- totalPassiveTokens += pStat.get(j).get(2).intValue();
- }
- }
- return totalPassiveTokens;
+
+ if (skill_3a_level == 0) {
+ if (skill_2a_level >= 2) {
+ skill_3a.setItemType(Material.PINK_TERRACOTTA);
+ }
+ } else {
+ skill_3a.setItemType(Material.GREEN_TERRACOTTA);
}
- private void generateMainMenu(Player p) {
- //Player Information and Leaderboard
- LanguageSelector lang = new LanguageSelector(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- Leaderboards leaderboards = new Leaderboards();
- PlayerStats timeStats = new PlayerStats(p);
-
- //Gui Set-up
- GuiWrapper gui = new GuiWrapper(p,Bukkit.createInventory(p, 45, "Skills"));
- String nameColor = ChatColor.AQUA.toString() + ChatColor.BOLD.toString();
- String descriptionColor = ChatColor.GRAY.toString() + ChatColor.ITALIC.toString();
- String statisticNameColor = ChatColor.GRAY.toString();
- String statisticColor = ChatColor.BLUE.toString();
-
- //Menu Options (Items)
- GuiItem global = new GuiItem(Material.NETHER_STAR,4,gui);
- GuiItem digging = new GuiItem(Material.IRON_SHOVEL,11,gui);
- GuiItem woodcutting = new GuiItem(Material.IRON_AXE,12,gui);
- GuiItem mining = new GuiItem(Material.IRON_PICKAXE,13,gui);
- GuiItem farming = new GuiItem(Material.IRON_HOE,14,gui);
- GuiItem fishing = new GuiItem(Material.FISHING_ROD,15,gui);
- GuiItem archery = new GuiItem(Material.BOW,20,gui);
- GuiItem beastMastery = new GuiItem(Material.BONE,21,gui);
- GuiItem swords = new GuiItem(Material.IRON_SWORD,22,gui);
- GuiItem armor = new GuiItem(Material.IRON_CHESTPLATE,23,gui);
- GuiItem axes = new GuiItem(Material.GOLDEN_AXE,24,gui);
- GuiItem repair = new GuiItem(Material.ANVIL,29,gui);
- GuiItem agility = new GuiItem(Material.LEATHER_LEGGINGS,30,gui);
- GuiItem alchemy = new GuiItem(Material.POTION,31,gui);
- GuiItem smelting = new GuiItem(Material.COAL,32,gui);
- GuiItem enchanting = new GuiItem(Material.ENCHANTING_TABLE,33,gui);
- GuiItem info = new GuiItem(Material.MAP,36,gui);
- GuiItem configuration = new GuiItem(Material.REDSTONE,44,gui);
-
- GuiItem[] guiItems = {global,digging,woodcutting,mining,farming,fishing,archery,beastMastery,swords,armor,axes,repair,agility,alchemy,smelting,enchanting,info,configuration};
- String[] labels = {lang.getString("global"),lang.getString("digging"),lang.getString("woodcutting"),lang.getString("mining"),lang.getString("farming"),lang.getString("fishing"),lang.getString("archery"),lang.getString("beastMastery"),lang.getString("swordsmanship"),lang.getString("defense"),lang.getString("axeMastery"),lang.getString("repair"),lang.getString("agility"),lang.getString("alchemy"),lang.getString("smelting"),lang.getString("enchanting"),lang.getString("information"),lang.getString("configuration")};
- String[] labels0 = {"global","digging", "woodcutting", "mining", "farming", "fishing", "archery", "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy", "smelting", "enchanting","information","configuration"};
-
- for (int i = 0; i < guiItems.length; i++) {
- GuiItem item = guiItems[i];
- String translatedLabel = labels[i];
- String label = labels0[i];
- item.setName(translatedLabel);
- item.setNameColor(nameColor);
- if (i == 0) { //Global
- int globalTokens = (int) pStat.get(labels0[i]).get(1);
- int totalLevel = pStat.get("global").get(0).intValue();
- int totalExperience = (int) pStat.get("global").get(29);
- int totalPlayers = leaderboards.getLeaderboardSize("global");
- int rank = leaderboards.getLeaderboardPosition(p,"global");
-
- item.addStatistic(lang.getString("total") + " " + lang.getString("level"), String.valueOf(totalLevel));
- item.addStatistic(lang.getString("total") + " " + lang.getString("exp"), String.valueOf(totalExperience));
- item.addSpecialLoreLine(statisticNameColor + lang.getString("rank") +": " + ChatColor.WHITE+ChatColor.BOLD.toString() + "" + String.format("%,d",rank) + ChatColor.RESET + descriptionColor +" " + lang.getString("outOf")+ " " + ChatColor.RESET + ChatColor.WHITE.toString() + totalPlayers);
- if (globalTokens > 0) {
- item.addEnchantmentGlow();
- }
- } else if (i < 16) { //Skills
- String skillName = labels0[i];
- int passiveTokens = (int) pStat.get(labels0[i]).get(2);
- int skillTokens = (int) pStat.get(labels0[i]).get(3);
- int level = pStat.get(labels0[i]).get(0).intValue();
- int EXP = pStat.get(labels0[i]).get(1).intValue();
- int totalPlayers = leaderboards.getLeaderboardSize(labels0[i]);
- int rank = leaderboards.getLeaderboardPosition(p,labels0[i]);
- String EXPtoNextString = getExpToNextString(p,skillName);
-
- GuiDisplayStatistic levelStat = new GuiDisplayStatistic(lang.getString("level"),level,ChatColor.GRAY.toString(),ChatColor.BLUE.toString());
- GuiDisplayStatistic expStat = new GuiDisplayStatistic(lang.getString("experience"),EXP,ChatColor.GRAY.toString(),ChatColor.BLUE.toString());
- GuiDisplayStatistic expToLevelStat = new GuiDisplayStatistic(lang.getString("expToLevel"),EXPtoNextString,ChatColor.GRAY.toString(),ChatColor.GREEN.toString());
-
- item.addStatistic(levelStat);
- item.addStatistic(expStat);
- item.addStatistic(expToLevelStat);
- item.addSpecialLoreLine(statisticNameColor + lang.getString("rank") +": " + ChatColor.WHITE+ChatColor.BOLD.toString() + "" + String.format("%,d",rank) + ChatColor.RESET + descriptionColor +" " + lang.getString("outOf")+ " " + ChatColor.RESET + ChatColor.WHITE.toString() + totalPlayers);
- if (passiveTokens > 0 || skillTokens > 0) {
- item.addEnchantmentGlow();
- }
+ if (skill_3b_level == 0) {
+ if (skill_2b_level >= 2) {
+ skill_3b.setItemType(Material.PINK_TERRACOTTA);
+ }
+ } else {
+ skill_3b.setItemType(Material.GREEN_TERRACOTTA);
+ }
- } else if (i == 16){ //Information
- int totalSkillTokens = getTotalSkillTokens(p);
- int totalPassiveTokens = getTotalPassiveTokens(p);
- int globalTokens = pStat.get("global").get(1).intValue();
- String playTimeString = timeStats.getPlayerPlayTimeString();
- double personalMultiplier = (double) pStat.get("global").get(23);
- int souls = (int) pStat.get("global").get(20);
-
- item.addStatistic(lang.getString("totalPlayTime"),playTimeString);
- item.addStatistic(lang.getString("personalMultiplier"),String.valueOf(personalMultiplier)+"x");
- item.addStatistic(lang.getString("globalPassiveTitle0"),globalTokens);
- item.addStatistic(lang.getString("diggingPassiveTitle2"),totalSkillTokens);
- item.addStatistic(lang.getString("diggingPassiveTitle0"),totalPassiveTokens);
- item.addStatistic(UtilityMethods.capitalizeString(lang.getString("souls")),souls);
- } else if (i == 17) {//Configuration
- item.setDescription(lang.getString("clickForOptions"));
- }
- gui.addItem(item);
- }
+ if (skill_M_level == 0) {
+ if (skill_1a_level + skill_1b_level + skill_2a_level + skill_2b_level + skill_3a_level
+ + skill_3b_level >= 10) {
+ skill_M.setItemType(Material.PINK_TERRACOTTA);
+ }
+ } else {
+ skill_M.setItemType(Material.GREEN_TERRACOTTA);
+ }
+ }
+
+ @Override
+ public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
+ Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
+
+ // /frpg aka MainGUI
+ if (args.length == 0) {
+ CommandHelper commandHelper = new CommandHelper(sender, args, 0, "");
+ commandHelper.setCheckInBed(true);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setPermissionName("mainGUI");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player p = (Player) sender;
+ generateMainMenu(p); //Generates the Main GUI
+ return true;
+ }
- //Put the items in the inventory
- gui.displayGuiForPlayer();
+ //Help
+ else if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg help [::page::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 1, 2,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setPermissionName("help");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ int page = 1;
+ if (args.length == 2) {
+ page = getArgumentAsInteger(args[1]);
+ if (page == Integer.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper input
+ }
+ }
+ messagePlayerHelpScreen(sender, page); //Sends player the corresponding help screen
}
- private void messagePlayerHelpScreen(CommandSender sender, int page) {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- final int TOTAL_PAGES = 4;
- if (page > TOTAL_PAGES || page < 1) {
- page = 1; //Page input out of bounds
- }
- p.sendMessage(ChatColor.RED + "------| " + ChatColor.GREEN + ChatColor.BOLD.toString() + " Help" +
- ChatColor.RESET + ChatColor.GREEN.toString() + " " + lang.getString("page") + " [" + Integer.toString(page) + "/" + Integer.toString(TOTAL_PAGES) + "]" +
- ChatColor.RED.toString() + " |-----");
- switch (page) {
- case 1:
- p.sendMessage(ChatColor.GOLD + "/frpg" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc0"));
- p.sendMessage(ChatColor.GOLD + "/frpg skillTreeGUI [" + lang.getString("skillName") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc1"));
- p.sendMessage(ChatColor.GOLD + "/frpg configurationGUI" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc2"));
- p.sendMessage(ChatColor.GOLD + "/frpg giveEXP [" + lang.getString("playerName") + "] [" + lang.getString("skillName") + "] [amount]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc3"));
- p.sendMessage(ChatColor.GOLD + "/frpg setLevel [" + lang.getString("playerName") + "] [" + lang.getString("skillName") + "] [" + lang.getString("level") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc4"));
- p.sendMessage(ChatColor.GOLD + "/frpg statReset [" + lang.getString("playerName") + "] [" + lang.getString("skillName") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc5"));
- p.sendMessage(ChatColor.GOLD + "/frpg statLeaders [" + lang.getString("skillName") + "] [" + lang.getString("page") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc6"));
- p.sendMessage(ChatColor.GOLD + "/frpg info" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc7"));
- break;
- case 2:
- p.sendMessage(ChatColor.GOLD + "/frpg flintToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("diggingPerkTitle4"));
- p.sendMessage(ChatColor.GOLD + "/frpg speedToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("agilityPerkTitle2"));
- p.sendMessage(ChatColor.GOLD + "/frpg potionToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("alchemyPerkTitle2"));
- p.sendMessage(ChatColor.GOLD + "/frpg flamePickToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("smeltingPerkTitle2"));
- p.sendMessage(ChatColor.GOLD + "/frpg grappleToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("fishingPerkTitle4"));
- p.sendMessage(ChatColor.GOLD + "/frpg hotRodToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("fishingPerkTitle5"));
- p.sendMessage(ChatColor.GOLD + "/frpg veinMinerToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("miningPerkTitle4"));
- p.sendMessage(ChatColor.GOLD + "/frpg megaDigToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("diggingPerkTitle6"));
- break;
- case 3:
- p.sendMessage(ChatColor.GOLD + "/frpg leafBlowerToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("woodcuttingPerkTitle5"));
- p.sendMessage(ChatColor.GOLD + "/frpg holyAxeToggle [" + lang.getString("onOrOff") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("manuallyToggles") + " " + lang.getString("axeMasteryPerkTitle1"));
- p.sendMessage(ChatColor.GOLD + "/frpg enchantItem [" + lang.getString("level") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc8"));
- p.sendMessage(ChatColor.GOLD + "/frpg setSouls" + " [" + lang.getString("playerName") + "]" + " [" + lang.getString("amount") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc9"));
- p.sendMessage(ChatColor.GOLD + "/frpg setTokens" + " [" + lang.getString("playerName") + "]" + " [" + lang.getString("skillName") + "]" + " [skill/passive]" + " [" + lang.getString("amount") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc10"));
- p.sendMessage(ChatColor.GOLD + "/frpg setTokens" + " [" + lang.getString("playerName") + "]" + " global" + " [" + lang.getString("amount") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc11"));
- p.sendMessage(ChatColor.GOLD + "/frpg saveStats [" + lang.getString("playerName") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc12"));
- p.sendMessage(ChatColor.GOLD + "/frpg setMultiplier [" + lang.getString("playerName") + "] " + "[" + lang.getString("amount") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc13"));
- break;
- case 4:
- p.sendMessage(ChatColor.GOLD + "/frpg resetCooldown [" + lang.getString("playerName") + "] [" + lang.getString("skillName") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc14"));
- p.sendMessage(ChatColor.GOLD + "/frpg statLookup [" + lang.getString("playerName") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc15"));
- p.sendMessage(ChatColor.GOLD + "/frpg changeMultiplier [" + lang.getString("playerName") + "] " + "[" + lang.getString("expIncrease") + "]" + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.RESET + ChatColor.WHITE + lang.getString("commandDesc16"));
- default:
- break;
- }
+
+ //saveStats
+ else if (args[0].equalsIgnoreCase("saveStats") || args[0].equalsIgnoreCase("statSave")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg saveStats";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 1, 2,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("saveStats");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ if (args.length == 1) {
+ PeriodicSaving saveAll = new PeriodicSaving();
+ saveAll.saveAllStats(false);
+ } else if (args.length == 2) {
+ String playerName = args[1];
+ Player target = plugin.getServer().getPlayer(playerName);
+ if (!isTargetOnline(target, sender)) {
+ return true; //Player not online
+ }
+ PlayerStatsLoadIn saveStats = new PlayerStatsLoadIn(target);
+ try {
+ saveStats.setPlayerStatsMap();
+ } catch (IOException e) {
+ FreeRPG.log(Level.ERROR, e.getMessage());
}
+ }
}
- private void createLeaderboard(CommandSender sender, int page, String skillName) {
- String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery", "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy", "smelting", "enchanting","global","playTime"};
- List labels_arr = Arrays.asList(labels_0);
- Leaderboards getStats = new Leaderboards();
- if (!getStats.isLeaderboardsLoaded()) {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- p.sendMessage(ChatColor.RED +"Leaderboard is not yet loaded, try again soon");
- } else {
- sender.sendMessage("Leaderboard is not yet loaded, try again soon");
- }
- }
- //Sorts and Updates leaderboard (if dynamic updates are on)
- getStats.sortLeaderBoard(skillName);
+ // Tutorial Document (Info)
+ else if (args[0].equalsIgnoreCase("info") || args[0].equalsIgnoreCase("use")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg info";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 0, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setPermissionName("info");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ p.sendMessage(
+ lang.getString("informationURL") + ": " + ChatColor.AQUA + ChatColor.UNDERLINE.toString()
+ + "shorturl.at/ptCDX" +
+ ChatColor.RESET + ChatColor.GOLD.toString() + ChatColor.BOLD.toString() + "<-- "
+ + lang.getString("click"));
+ }
- ArrayList sortedStats = getStats.getLeaderboard(skillName);
- int totalPlayers = sortedStats.size();
- int totalPages = (int) Math.ceil(totalPlayers / 10.0);
- if (page > totalPages) {
- page = 1;
- }
+ //Enchant Item Command
+ else if (args[0].equalsIgnoreCase("enchantItem") || args[0].equalsIgnoreCase("enchant")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg enchantItem [::level::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setPermissionName("enchantItem");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player p = (Player) sender;
+ int level = getArgumentAsInteger(args[1]);
+ if (level == Integer.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper input
+ }
+ if (level > 40) {
+ LanguageSelector lang = new LanguageSelector(p);
+ p.sendMessage(ChatColor.RED + lang.getString("levelArgument"));
+ return true; //Level input too high
+ }
+ ItemStack item = p.getInventory().getItemInMainHand();
+ PsuedoEnchanting enchant = new PsuedoEnchanting();
+ item = enchant.enchantItem(item, level, false);
+ p.getInventory().setItemInMainHand(item);
+ }
+
+ //Leader Board
+ else if (args[0].equalsIgnoreCase("leaderboard") || args[0].equalsIgnoreCase("statLeaders")
+ || args[0].equalsIgnoreCase("top")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg top [::skillName::] [::page::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, 3,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("leaderboard");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ int page = 1;
+ if (args.length == 3) {
+ page = getArgumentAsInteger(args[2]);
+ if (page == Integer.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper input
+ }
+ }
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy",
+ "smelting", "enchanting", "global", "playTime"};
+ List labels_arr = Arrays.asList(labels_0);
+ String skillName = UtilityMethods.convertStringToListCasing(labels_arr, args[1]);
+ if (!labels_arr.contains(skillName)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper input
+ }
+ createLeaderboard(sender, page, skillName);
+ }
+
+ //Stat Lookup
+ else if (args[0].equalsIgnoreCase("statLookup") || args[0].equalsIgnoreCase("lookupStats")
+ || args[0].equalsIgnoreCase("stats")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg stats [::playerName::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 1, 2,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("statLookup");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ if (args.length == 1) {
if (sender instanceof Player) {
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- String[] titles_0 = {lang.getString("digging"),lang.getString("woodcutting"),lang.getString("mining"),lang.getString("farming"),
- lang.getString("fishing"),lang.getString("archery"),lang.getString("beastMastery"),lang.getString("swordsmanship"),
- lang.getString("defense"),lang.getString("axeMastery"),lang.getString("repair"),lang.getString("agility"),lang.getString("alchemy"),
- lang.getString("smelting"),lang.getString("enchanting"),lang.getString("global"),lang.getString("totalPlayTime")};
- String skillTitle = titles_0[labels_arr.indexOf(skillName)];
- p.sendMessage(ChatColor.AQUA + "------| " + ChatColor.WHITE + ChatColor.BOLD.toString() + skillTitle + " "+lang.getString("leaderboard")+"" +
- ChatColor.RESET + ChatColor.WHITE.toString() + " "+lang.getString("page")+" [" + Integer.toString(page) + "/" + Integer.toString(totalPages) + "]" +
- ChatColor.AQUA.toString() + " |-----");
- for (int i = 10 * (page - 1); i < (int) Math.min(10 * page, totalPlayers); i++) {
- PlayerLeaderboardStat info = sortedStats.get(i);
- if (skillName.equalsIgnoreCase("global")) {
- p.sendMessage(ChatColor.WHITE + Integer.toString(i + 1) + ". " + ChatColor.AQUA + info.get_pName() + ChatColor.WHITE.toString() + " - " + ChatColor.WHITE + String.format("%,d", info.get_sortedStat()) + ChatColor.WHITE + " (" + ChatColor.GRAY + String.format("%,d", info.get_stat2()) + ChatColor.WHITE + ")");
- }
- else if (skillName.equalsIgnoreCase("playTime")){
- p.sendMessage(ChatColor.WHITE + Integer.toString(i + 1) + ". " + ChatColor.AQUA + info.get_pName() + ChatColor.WHITE.toString() + " - " + ChatColor.WHITE + info.get_playTimeString() );
- }
- else {
- p.sendMessage(ChatColor.WHITE + Integer.toString(i + 1) + ". " + ChatColor.AQUA + info.get_pName() + ChatColor.WHITE.toString() + " - " + ChatColor.WHITE + String.format("%,d", info.get_stat2()) + ChatColor.WHITE + " (" + ChatColor.GRAY + String.format("%,d", info.get_sortedStat()) + ChatColor.WHITE + ")");
- }
- }
+ Player p = (Player) sender;
+ p.performCommand("frpg statLookup " + p.getName());
} else {
- String[] titles_0 = {"Digging", "Woodcutting", "Mining", "Farming", "Fishing", "Archery", "Beast Mastery", "Swordsmanship", "Defense", "Axe Mastery", "Repair", "Agility", "Alchemy", "Smelting", "Enchanting", "Global"};
- String skillTitle = titles_0[labels_arr.indexOf(skillName)];
- sender.sendMessage("------| " + skillTitle + " Leaderboard" + " Page [" + Integer.toString(page) + "/" + Integer.toString(totalPages) + "]" + " |-----");
- for (int i = 10 * (page - 1); i < (int) Math.min(10 * page, totalPlayers); i++) {
- PlayerLeaderboardStat info = sortedStats.get(i);
- if (skillName.equalsIgnoreCase("global")) {
- sender.sendMessage(Integer.toString(i + 1) + ". " + info.get_pName() + " - " + Integer.toString((int)info.get_sortedStat()) + " (" + info.get_stat2() + ")");
- }
- else if (skillName.equalsIgnoreCase("playTime")) {
- sender.sendMessage(Integer.toString(i + 1) + ". " + info.get_pName() + " - " + info.get_playTimeString());
- }
- else {
- sender.sendMessage(Integer.toString(i + 1) + ". " + info.get_pName() + " - " + Integer.toString((int)info.get_stat2()) + " (" + info.get_sortedStat() + ")");
- }
-
- }
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper Arguments
}
- }
- private void createStatLookup(CommandSender sender, String playerName) {
+ } else if (args.length == 2) {
+ String playerName = args[1];
Leaderboards leaderboards = new Leaderboards();
- if (sender instanceof Player) {
+ if (!leaderboards.isPlayerOnLeaderboards(playerName)) {
+ if (sender instanceof Player) {
Player p = (Player) sender;
LanguageSelector lang = new LanguageSelector(p);
- List leaderboardNames = leaderboards.getLeaderboardNames();
- p.sendMessage(ChatColor.AQUA + "--------| " + ChatColor.WHITE + ChatColor.BOLD.toString() + playerName + ChatColor.RESET + ChatColor.WHITE.toString() + " " + lang.getString("stats") +
- ChatColor.AQUA.toString() + " |-------");
- StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
- for (String leaderboardName : leaderboardNames) {
- int rank = leaderboards.getLeaderboardPosition(playerName, leaderboardName);
- PlayerLeaderboardStat playerStat = leaderboards.getPlayerStat(playerName, leaderboardName);
- String displayedStat;
- String displayTitle;
- String rankString = UtilityMethods.intToRankingString(rank);
- if (rankString.equals("1st")) {
- rankString = ChatColor.YELLOW + rankString;
- } else if (rankString.equals("2nd")) {
- rankString = ChatColor.WHITE + rankString;
- } else if (rankString.equals("3rd")) {
- rankString = ChatColor.GOLD + rankString;
- } else {
- rankString = ChatColor.GRAY + rankString;
- }
- if (leaderboardName.equalsIgnoreCase("playTime")) {
- displayedStat = playerStat.get_playTimeString();
- displayTitle = "Play Time";
- } else if (leaderboardName.equalsIgnoreCase("global")) {
- displayedStat = String.format("%,d", playerStat.get_sortedStat());
- displayTitle = "Global Level";
- } else {
- displayedStat = String.format("%,d", playerStat.get_stat2());
- displayTitle = stringsAndOtherData.camelCaseToTitle(leaderboardName);
- }
- p.sendMessage(ChatColor.AQUA + ChatColor.BOLD.toString() + displayTitle + ChatColor.RESET + ChatColor.GRAY.toString() + " - " +
- ChatColor.WHITE + displayedStat + " (" + rankString + ChatColor.WHITE + ")");
- }
+ p.sendMessage(ChatColor.RED + lang.getString("playerNotInLeaderboard"));
+ } else {
+ sender.sendMessage("That player is not on any leaderboards");
+ }
+ return true; //Player not on leaderboards
+ }
+ createStatLookup(sender, playerName);
+ }
+ }
+ //CooldownReset
+ else if (args[0].equalsIgnoreCase("resetCooldown") || args[0].equalsIgnoreCase(
+ "cooldownReset")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg resetCooldown [::playerName::] [::skillName::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, 3,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("resetCooldown");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ //Arguments --> Variables
+ Player target;
+ String skillNameInput;
+ if (args.length == 2) {
+ if (sender instanceof Player) {
+ target = (Player) sender;
+ skillNameInput = args[1];
} else {
- List leaderboardNames = leaderboards.getLeaderboardNames();
- sender.sendMessage("--------| " + playerName + " stats |-------");
- StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
- for (String leaderboardName : leaderboardNames) {
- int rank = leaderboards.getLeaderboardPosition(playerName, leaderboardName);
- PlayerLeaderboardStat playerStat = leaderboards.getPlayerStat(playerName, leaderboardName);
- String displayedStat;
- String displayTitle;
- String rankString = UtilityMethods.intToRankingString(rank);
- if (leaderboardName.equalsIgnoreCase("playTime")) {
- displayedStat = playerStat.get_playTimeString();
- displayTitle = "Play Time";
- } else if (leaderboardName.equalsIgnoreCase("global")) {
- displayedStat = String.format("%,d", playerStat.get_sortedStat());
- displayTitle = "Global Level";
- } else {
- displayedStat = String.format("%,d", playerStat.get_stat2());
- displayTitle = stringsAndOtherData.camelCaseToTitle(leaderboardName);
- }
- sender.sendMessage(displayTitle + " - " + displayedStat + " (" + rankString +")");
- }
- }
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper Arguments
+ }
+ } else {
+ String playerName = args[1];
+ skillNameInput = args[2];
+
+ //Target Online Check
+ target = plugin.getServer().getPlayer(playerName);
+ boolean targetOnline = isTargetOnline(target, sender);
+ if (!targetOnline) {
+ return true; //Target not online
+ }
+ }
+
+ //Skill name match check
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery"};
+ List labels = Arrays.asList(labels_0);
+ String skillName = UtilityMethods.convertStringToListCasing(labels, skillNameInput);
+ if (!labels.contains(skillName)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true;
+ }
+
+ AbilityTimers abilityTimers = new AbilityTimers(target);
+ abilityTimers.setPlayerCooldownTime(skillName, 0);
+
}
- private void addToggleButton(Player p, GuiWrapper gui, String parseableName, Material iconItemType, int iconPosition, int toggleIndex) {
- LanguageSelector lang = new LanguageSelector(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
- GuiItem guiItem = new GuiItem(iconItemType,iconPosition,gui);
- guiItem.setName(lang.translateMessage(parseableName));
- gui.addItem(guiItem);
+ //createFakePlayers
+ else if (args[0].equalsIgnoreCase("createFakePlayers") || args[0].equalsIgnoreCase(
+ "createFakeProfiles")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg createFakePlayers [#]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("createFakePlayers");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+
+ int numPlayers = getArgumentAsInteger(args[1]);
+ if (numPlayers == Integer.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper input
+ }
+
+ PlayerStatsFilePreparation playerStatsFilePreparation = new PlayerStatsFilePreparation();
+ Random rand = new Random();
+ for (int i = 0; i < numPlayers; i++) {
+ String fakeName = "FakePlayer" + rand.nextInt(100000);
+ UUID fakeUUID = UUID.fromString("badf" + UUID.randomUUID().toString()
+ .substring(4)); //"badf" hexadecimal identifier for "bad files"
+ playerStatsFilePreparation.preparePlayerFile(fakeName, fakeUUID, false);
+ }
- GuiItem guiItemToggle = new GuiItem(Material.LIME_DYE,iconPosition+9,gui);
- if ( (int) pStat.get("global").get(toggleIndex) > 0) {
- guiItemToggle.setNameColor(ChatColor.BOLD + ChatColor.GREEN.toString());
- guiItemToggle.setName(lang.getString("on0"));
- }
- else {
- guiItemToggle.setItemType(Material.GRAY_DYE);
- guiItemToggle.setNameColor(ChatColor.BOLD + ChatColor.RED.toString());
- guiItemToggle.setName(lang.getString("off0"));
- }
- gui.addItem(guiItemToggle);
}
- private void addToggleButton(Player p, GuiWrapper gui, String parseableName, Material iconItemType, int iconPosition, boolean toggleCondition) {
- LanguageSelector lang = new LanguageSelector(p);
- PlayerStats pStatClass = new PlayerStats(p);
- GuiItem guiItem = new GuiItem(iconItemType,iconPosition,gui);
- guiItem.setName(lang.translateMessage(parseableName));
- gui.addItem(guiItem);
+ //removeFakePlayers
+ else if (args[0].equalsIgnoreCase("deleteFakePlayers") || args[0].equalsIgnoreCase(
+ "deleteFakeProfiles") || args[0].equalsIgnoreCase("removeFakePlayers")
+ || args[0].equalsIgnoreCase("removeFakeProfiles")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg deleteFakePlayers";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 0, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("createFakePlayers");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+
+ File userdata = new File(
+ Bukkit.getServer().getPluginManager().getPlugin("FreeRPG").getDataFolder(),
+ File.separator + "PlayerDatabase");
+ File[] allUsers = userdata.listFiles();
+ for (File f : allUsers) {
+ if (f.getName().substring(0, 4).equalsIgnoreCase("badf")) {
+ f.delete();
+ }
+ }
- GuiItem guiItemToggle = new GuiItem(Material.LIME_DYE,iconPosition+9,gui);
- if (toggleCondition) {
- guiItemToggle.setNameColor(ChatColor.BOLD + ChatColor.GREEN.toString());
- guiItemToggle.setName(lang.getString("on0"));
- }
- else {
- guiItemToggle.setItemType(Material.GRAY_DYE);
- guiItemToggle.setNameColor(ChatColor.BOLD + ChatColor.RED.toString());
- guiItemToggle.setName(lang.getString("off0"));
- }
- gui.addItem(guiItemToggle);
}
- private void setTranslatedSkillTreeInformation(Player p,String skillName,Map perksMap,Map descriptionsMap,Map passivePerksMap,Map passiveDescriptionsMap) {
- LanguageSelector lang = new LanguageSelector(p);
- String[] newTitles = perksMap.get(skillName);
- String[] newDescs = descriptionsMap.get(skillName);
- String[] newPassiveTitles = passivePerksMap.get(skillName);
- String[] newPassiveDescs = passiveDescriptionsMap.get(skillName);
- int i = 0;
- for (String title : perksMap.get(skillName)) {
- String id = skillName + "PerkTitle" + i;
- newTitles[i] = lang.getString(id);
- i += 1;
- }
- i = 0;
- for (String desc : descriptionsMap.get(skillName)) {
- String id = skillName + "PerkDesc" + i;
- newDescs[i] = lang.getString(id);
- i += 1;
- }
- i = 0;
- for (String passiveTitle : passivePerksMap.get(skillName)) {
- String id = skillName + "PassiveTitle" + i;
- newPassiveTitles[i] = lang.getString(id);
- i += 1;
- }
- i = 0;
- for (String passiveDesc : passiveDescriptionsMap.get(skillName)) {
- String id = skillName + "PassiveDesc" + i;
- newPassiveDescs[i] = lang.getString(id);
- i += 1;
- }
- perksMap.put(skillName, newTitles);
- descriptionsMap.put(skillName, newDescs);
- passivePerksMap.put(skillName, newPassiveTitles);
- passiveDescriptionsMap.put(skillName, newPassiveDescs);
- }
- private void setSkillTreeProgressMainSkill(Player p, String skillName, GuiWrapper gui){
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStatAll = pStatClass.getPlayerData();
- ArrayList pStats = pStatAll.get(skillName);
- Integer[] indices = {11,29,13,31,7,43,26};
- int skill_1a_level = (Integer) pStats.get(7);
- int skill_1b_level = (Integer) pStats.get(8);
- int skill_2a_level = (Integer) pStats.get(9);
- int skill_2b_level = (Integer) pStats.get(10);
- int skill_3a_level = (Integer) pStats.get(11);
- int skill_3b_level = (Integer) pStats.get(12);
- int skill_M_level = (Integer) pStats.get(13);
-
- GuiItem skill_1a = new GuiItem(Material.PINK_TERRACOTTA,11,gui);
- GuiItem skill_2a = new GuiItem(Material.RED_TERRACOTTA,13,gui);
- GuiItem skill_3a = new GuiItem(Material.RED_TERRACOTTA,7,gui);
- GuiItem skill_1b = new GuiItem(Material.PINK_TERRACOTTA,29,gui);
- GuiItem skill_2b = new GuiItem(Material.RED_TERRACOTTA,31,gui);
- GuiItem skill_3b = new GuiItem(Material.RED_TERRACOTTA,43,gui);
- GuiItem skill_M = new GuiItem(Material.RED_TERRACOTTA,26,gui);
- if (skill_1a_level == 0) {
- skill_1a.setItemType(Material.PINK_TERRACOTTA);
- }
- else if (skill_1a_level > 0 && skill_1a_level < 5) {
- skill_1a.setItemType(Material.YELLOW_TERRACOTTA);
- }
- else {
- skill_1a.setItemType(Material.GREEN_TERRACOTTA);
+ //Save FRPG Data
+ else if (args[0].equalsIgnoreCase("thoroughSave")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg save";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 0, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("saveStats");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+
+ PeriodicSaving periodicSaving = new PeriodicSaving();
+ new BukkitRunnable() {
+ @Override
+ public void run() {
+ periodicSaving.saveAllStats(true);
}
+ }.runTaskAsynchronously(plugin);
+ }
- if (skill_1b_level == 0) {
- skill_1b.setItemType(Material.PINK_TERRACOTTA);
- }
- else if (skill_1b_level > 0 && skill_1b_level < 5) {
- skill_1b.setItemType(Material.YELLOW_TERRACOTTA);
- }
- else {
- skill_1b.setItemType(Material.GREEN_TERRACOTTA);
- }
+ //Load in all players
+ else if (args[0].equalsIgnoreCase("loadInAllPlayerFiles") || args[0].equalsIgnoreCase(
+ "loadInPlayerFiles")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg save";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 0, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("saveStats");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ OfflinePlayerStatLoadIn offlinePlayerStatLoadIn = new OfflinePlayerStatLoadIn();
+ offlinePlayerStatLoadIn.loadInAllOfflinePlayers();
+ }
- if (skill_2a_level == 0) {
- if (skill_1a_level >= 2) {
- skill_2a.setItemType(Material.PINK_TERRACOTTA);
- }
- }
- else if (skill_2a_level > 0 && skill_2a_level < 5) {
- skill_2a.setItemType(Material.YELLOW_TERRACOTTA);
- }
- else {
- skill_2a.setItemType(Material.GREEN_TERRACOTTA);
+ //GiveEXP
+ else if (args[0].equalsIgnoreCase("giveEXP") || args[0].equalsIgnoreCase("expGive")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg giveEXP [::playerName::] [::skillName::] [::exp::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 3, 4,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("giveEXP");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player target;
+ String skillNameInput;
+ String expInput;
+ if (args.length == 3) {
+ if (sender instanceof Player) {
+ target = (Player) sender;
+ skillNameInput = args[1];
+ expInput = args[2];
+ } else {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper Arguments
+ }
+ } else {
+ String playerName = args[1];
+ skillNameInput = args[2];
+ expInput = args[3];
+
+ //Target Online Check
+ target = plugin.getServer().getPlayer(playerName);
+ boolean targetOnline = isTargetOnline(target, sender);
+ if (!targetOnline) {
+ return true; //Target not online
+ }
+ }
+
+ int exp = getArgumentAsInteger(expInput);
+ if (exp == Integer.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (exp not integer)
+ }
+
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy",
+ "smelting", "enchanting"};
+ List labels_arr = Arrays.asList(labels_0);
+ String skillName = UtilityMethods.convertStringToListCasing(labels_arr, skillNameInput);
+ if (!labels_arr.contains(skillName)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (skillName not valid)
+ }
+
+ if (exp < 0) {
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ p.sendMessage(ChatColor.RED + lang.getString("onlyIncrease"));
+ } else {
+ sender.sendMessage(
+ "Please only increase exp with this command, otherwise, use /frpg statReset then /frpg giveEXP");
}
+ return true; //Improper argument (exp change not positive)
+ }
+ ChangeStats increaseStats = new ChangeStats(target);
+ increaseStats.set_isCommand(true);
+ increaseStats.changeEXP(skillName, exp);
+ increaseStats.setTotalLevel();
+ increaseStats.setTotalExperience();
+ }
- if (skill_2b_level == 0) {
- if (skill_1b_level >= 2) {
- skill_2b.setItemType(Material.PINK_TERRACOTTA);
- }
- }
- else if (skill_2b_level > 0 && skill_2b_level < 5) {
- skill_2b.setItemType(Material.YELLOW_TERRACOTTA);
- }
- else {
- skill_2b.setItemType(Material.GREEN_TERRACOTTA);
+ //setLevel
+ else if (args[0].equalsIgnoreCase("setLevel") || args[0].equalsIgnoreCase("levelSet")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg setLevel [::playerName::] [::skillName::] [::level::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 3, 4,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("setLevel");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player target;
+ String skillNameInput;
+ String levelInput;
+ if (args.length == 3) {
+ if (sender instanceof Player) {
+ target = (Player) sender;
+ skillNameInput = args[1];
+ levelInput = args[2];
+ } else {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper Arguments
+ }
+ } else {
+ String playerName = args[1];
+ skillNameInput = args[2];
+ levelInput = args[3];
+
+ //Target Online Check
+ target = plugin.getServer().getPlayer(playerName);
+ boolean targetOnline = isTargetOnline(target, sender);
+ if (!targetOnline) {
+ return true; //Target not online
+ }
+ }
+
+ int level = getArgumentAsInteger(levelInput);
+ if (level == Integer.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (exp not integer)
+ }
+
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy",
+ "smelting", "enchanting"};
+ List labels_arr = Arrays.asList(labels_0);
+ String skillName = UtilityMethods.convertStringToListCasing(labels_arr, skillNameInput);
+ if (!labels_arr.contains(skillName)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (skillName not valid)
+ }
+
+ ChangeStats increaseStats = new ChangeStats(target);
+ int exp = increaseStats.getEXPfromLevel(level);
+ PlayerStats pStatClass = new PlayerStats(target);
+ Map> pStat = pStatClass.getPlayerData();
+ int currentExp = (int) pStat.get(skillName).get(1);
+
+ if (exp <= currentExp) {
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ p.sendMessage(ChatColor.RED + lang.getString("onlyIncrease"));
+ } else {
+ sender.sendMessage(
+ "Please only increase levels with this command, otherwise, use /frpg statReset then /frpg setLevel");
}
+ return true; //Improper argument (exp change not positive)
+ }
+ increaseStats.set_isCommand(true);
+ increaseStats.changeEXP(skillName, exp - currentExp + 1);
+ increaseStats.setTotalLevel();
+ increaseStats.setTotalExperience();
+ }
- if (skill_3a_level == 0) {
- if (skill_2a_level >= 2) {
- skill_3a.setItemType(Material.PINK_TERRACOTTA);
- }
- }
- else {
- skill_3a.setItemType(Material.GREEN_TERRACOTTA);
- }
+ //statReset
+ else if (args[0].equalsIgnoreCase("statReset") || args[0].equalsIgnoreCase("resetStat")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg statReset [::playerName::] [::skillName::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, 3,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("statReset");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player target;
+ String skillNameInput;
+ if (args.length == 2) {
+ if (sender instanceof Player) {
+ target = (Player) sender;
+ skillNameInput = args[1];
+ } else {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper Arguments
+ }
+ } else {
+ String playerName = args[1];
+ skillNameInput = args[2];
+
+ //Target Online Check
+ target = plugin.getServer().getPlayer(playerName);
+ boolean targetOnline = isTargetOnline(target, sender);
+ if (!targetOnline) {
+ return true; //Target not online
+ }
+ }
+
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery",
+ "repair", "agility", "alchemy", "smelting", "enchanting",
+ "global", "all"};
+ List labels_arr = Arrays.asList(labels_0);
+ String skillName = UtilityMethods.convertStringToListCasing(labels_arr, skillNameInput);
+ if (!labels_arr.contains(skillName)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (skillName not valid)
+ }
+ ChangeStats changeStats = new ChangeStats(target);
+ if (!skillName.equalsIgnoreCase("all")) {
+ changeStats.resetStat(skillName);
+ } else {
+ for (String skillNameLabel : labels_arr) {
+ if (!skillNameLabel.equalsIgnoreCase("all")) {
+ changeStats.resetStat(skillNameLabel);
+ }
+ }
+ }
+ }
- if (skill_3b_level == 0) {
- if (skill_2b_level >= 2) {
- skill_3b.setItemType(Material.PINK_TERRACOTTA);
- }
- }
- else {
- skill_3b.setItemType(Material.GREEN_TERRACOTTA);
+ //setSouls
+ else if (args[0].equalsIgnoreCase("setSouls") || args[0].equalsIgnoreCase("soulsSet")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg setSouls [::playerName::] [::amount::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, 3,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("setSouls");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player target;
+ String soulsInput;
+ if (args.length == 2) {
+ if (sender instanceof Player) {
+ target = (Player) sender;
+ soulsInput = args[1];
+ } else {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper Arguments
}
+ } else {
+ String playerName = args[1];
+ soulsInput = args[2];
- if (skill_M_level == 0) {
- if (skill_1a_level+skill_1b_level+skill_2a_level+skill_2b_level+skill_3a_level+skill_3b_level >=10) {
- skill_M.setItemType(Material.PINK_TERRACOTTA);
- }
+ //Target Online Check
+ target = plugin.getServer().getPlayer(playerName);
+ boolean targetOnline = isTargetOnline(target, sender);
+ if (!targetOnline) {
+ return true; //Target not online
}
- else {
- skill_M.setItemType(Material.GREEN_TERRACOTTA);
- }
- }
+ }
- @Override
- public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
- Plugin plugin = FreeRPG.getPlugin(FreeRPG.class);
+ int souls = getArgumentAsInteger(soulsInput);
+ if (souls == Integer.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (souls not integer)
+ }
+ ChangeStats increaseStats = new ChangeStats(target);
+ increaseStats.setStat("global", 20, souls);
+ }
- // /frpg aka MainGUI
- if (args.length == 0) {
- CommandHelper commandHelper = new CommandHelper(sender,args,0,"");
- commandHelper.setCheckInBed(true);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setPermissionName("mainGUI");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player p = (Player) sender;
- generateMainMenu(p); //Generates the Main GUI
- return true;
- }
-
- //Help
- else if (args[0].equalsIgnoreCase("help") || args[0].equalsIgnoreCase("?")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg help [::page::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,1,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setPermissionName("help");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- int page = 1;
- if (args.length == 2) {
- page = getArgumentAsInteger(args[1]);
- if (page == Integer.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper input
- }
- }
- messagePlayerHelpScreen(sender,page); //Sends player the corresponding help screen
- }
+ //setTokens
+ else if (args[0].equalsIgnoreCase("setTokens") || args[0].equalsIgnoreCase("tokensSet")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg setTokens [::playerName::] global [::amount::] or /frpg setTokens [::playerName::] [::skillName::] skill/passive [::amount::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 3, 5,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("setTokens");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player target;
+ String skillNameInput;
+ String tokenType;
+ String amountInput;
+ if (args.length == 3) { // Two inputs: tokenType and amount
+ if (sender instanceof Player) {
+ target = (Player) sender;
+ tokenType = args[1];
+ amountInput = args[2];
+ skillNameInput = "global";
+ } else {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper Arguments
+ }
+ } else if (args.length == 4) {
+ if (args[2].equalsIgnoreCase("global")) { //Three inputs: PlayerName, token type, amount
+ String playerName = args[1];
+ tokenType = args[2];
+ skillNameInput = "global";
+ amountInput = args[3];
+
+ //Target Online Check
+ target = plugin.getServer().getPlayer(playerName);
+ boolean targetOnline = isTargetOnline(target, sender);
+ if (!targetOnline) {
+ return true; //Target not online
+ }
+ } else { //Three inputs: Skillname, tokenType, amount
+ target = (Player) sender;
+ skillNameInput = args[1];
+ tokenType = args[2];
+ amountInput = args[3];
+ }
+ } else { //Four inputs: Playername, skillName, tokenType, amount
+ String playerName = args[1];
+ skillNameInput = args[2];
+ tokenType = args[3];
+ amountInput = args[4];
+
+ //Target Online Check
+ target = plugin.getServer().getPlayer(playerName);
+ boolean targetOnline = isTargetOnline(target, sender);
+ if (!targetOnline) {
+ return true; //Target not online
+ }
+ }
+
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy",
+ "smelting", "enchanting", "global"};
+ List labels_arr = Arrays.asList(labels_0);
+ String skillName = UtilityMethods.convertStringToListCasing(labels_arr, skillNameInput);
+ if (!labels_arr.contains(skillName)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (skillName not valid)
+ }
+
+ int amount = getArgumentAsInteger(amountInput);
+ if (amount == Integer.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (amount not integer)
+ }
+
+ if (!(tokenType.equalsIgnoreCase("global") || tokenType.equalsIgnoreCase("skill")
+ || tokenType.equalsIgnoreCase("passive"))) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper arguemnt (token type not global, skill, or passive)
+ }
+
+ ChangeStats increaseStats = new ChangeStats(target);
+ if (tokenType.equalsIgnoreCase("global")) {
+ increaseStats.setStat("global", 1, amount);
+ } else if (tokenType.equalsIgnoreCase("passive")) {
+ increaseStats.setStat(skillName, 2, amount);
+ } else if (tokenType.equalsIgnoreCase("skill")) {
+ increaseStats.setStat(skillName, 3, amount);
+ }
- //saveStats
- else if (args[0].equalsIgnoreCase("saveStats") || args[0].equalsIgnoreCase("statSave")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg saveStats";
- CommandHelper commandHelper = new CommandHelper(sender,args,1,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("saveStats");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- if (args.length == 1) {
- PeriodicSaving saveAll = new PeriodicSaving();
- saveAll.saveAllStats(false);
- }
- else if (args.length == 2) {
- String playerName = args[1];
- Player target = plugin.getServer().getPlayer(playerName);
- if (!isTargetOnline(target,sender)) {
- return true; //Player not online
- }
- PlayerStatsLoadIn saveStats = new PlayerStatsLoadIn(target);
- try {
- saveStats.setPlayerStatsMap();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
+ }
- // Tutorial Document (Info)
- else if (args[0].equalsIgnoreCase("info") || args[0].equalsIgnoreCase("use")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg info";
- CommandHelper commandHelper = new CommandHelper(sender,args,0,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setPermissionName("info");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- p.sendMessage(lang.getString("informationURL")+": " + ChatColor.AQUA + ChatColor.UNDERLINE.toString() + "shorturl.at/ptCDX" +
- ChatColor.RESET + ChatColor.GOLD.toString() + ChatColor.BOLD.toString() + "<-- " +lang.getString("click"));
- }
-
- //Enchant Item Command
- else if (args[0].equalsIgnoreCase("enchantItem") || args[0].equalsIgnoreCase("enchant")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg enchantItem [::level::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setPermissionName("enchantItem");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player p = (Player) sender;
- int level = getArgumentAsInteger(args[1]);
- if (level == Integer.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper input
- }
- if (level > 40) {
- LanguageSelector lang = new LanguageSelector(p);
- p.sendMessage(ChatColor.RED +lang.getString("levelArgument"));
- return true; //Level input too high
- }
- ItemStack item = p.getInventory().getItemInMainHand();
- PsuedoEnchanting enchant = new PsuedoEnchanting();
- item = enchant.enchantItem(item, level, false);
- p.getInventory().setItemInMainHand(item);
- }
-
- //Leader Board
- else if (args[0].equalsIgnoreCase("leaderboard") || args[0].equalsIgnoreCase("statLeaders") || args[0].equalsIgnoreCase("top")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg top [::skillName::] [::page::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,3,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("leaderboard");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- int page = 1;
- if (args.length == 3) {
- page = getArgumentAsInteger(args[2]);
- if (page == Integer.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper input
- }
- }
- String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery", "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy", "smelting", "enchanting","global","playTime"};
- List labels_arr = Arrays.asList(labels_0);
- String skillName = UtilityMethods.convertStringToListCasing(labels_arr,args[1]);
- if (!labels_arr.contains(skillName)) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper input
- }
- createLeaderboard(sender,page,skillName);
+ //setMultiplier
+ else if (args[0].equalsIgnoreCase("setMultiplier") || args[0].equalsIgnoreCase(
+ "multiplierSet")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg setMultiplier [::playerName::] [::expIncrease::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, 3,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("setMultiplier");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player target;
+ String multiplierInput;
+ if (args.length == 2) {
+ if (sender instanceof Player) {
+ target = (Player) sender;
+ multiplierInput = args[1];
+ } else {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper Arguments
}
+ } else {
+ String playerName = args[1];
+ multiplierInput = args[2];
- //Stat Lookup
- else if (args[0].equalsIgnoreCase("statLookup") || args[0].equalsIgnoreCase("lookupStats") || args[0].equalsIgnoreCase("stats")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg stats [::playerName::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,1,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("statLookup");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- if (args.length == 1) {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- p.performCommand("frpg statLookup " + p.getName());
- } else {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper Arguments
- }
- }
- else if (args.length == 2) {
- String playerName = args[1];
- Leaderboards leaderboards = new Leaderboards();
- if (!leaderboards.isPlayerOnLeaderboards(playerName)) {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- p.sendMessage(ChatColor.RED + lang.getString("playerNotInLeaderboard"));
- } else {
- sender.sendMessage("That player is not on any leaderboards");
- }
- return true; //Player not on leaderboards
- }
- createStatLookup(sender,playerName);
- }
+ //Target Online Check
+ target = plugin.getServer().getPlayer(playerName);
+ boolean targetOnline = isTargetOnline(target, sender);
+ if (!targetOnline) {
+ return true; //Target not online
}
+ }
- //CooldownReset
- else if (args[0].equalsIgnoreCase("resetCooldown") || args[0].equalsIgnoreCase("cooldownReset")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg resetCooldown [::playerName::] [::skillName::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,3,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("resetCooldown");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- //Arguments --> Variables
- Player target;
- String skillNameInput;
- if (args.length == 2) {
- if (sender instanceof Player) {
- target = (Player) sender;
- skillNameInput = args[1];
- } else {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper Arguments
- }
- } else {
- String playerName = args[1];
- skillNameInput = args[2];
-
- //Target Online Check
- target = plugin.getServer().getPlayer(playerName);
- boolean targetOnline = isTargetOnline(target,sender);
- if (!targetOnline) {
- return true; //Target not online
- }
- }
+ double multiplier = getArgumentAsDouble(multiplierInput);
+ if (multiplier == Double.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (amount not integer)
+ }
- //Skill name match check
- String[] labels_0 = {"digging","woodcutting","mining","farming","fishing","archery","beastMastery","swordsmanship","defense","axeMastery"};
- List labels = Arrays.asList(labels_0);
- String skillName = UtilityMethods.convertStringToListCasing(labels,skillNameInput);
- if (!labels.contains(skillName)) {
- commandHelper.sendImproperArgumentsMessage();
- return true;
- }
+ ChangeStats setMultiplier = new ChangeStats(target);
+ setMultiplier.setStat("global", 23, multiplier);
- AbilityTimers abilityTimers = new AbilityTimers(target);
- abilityTimers.setPlayerCooldownTime(skillName,0);
+ }
+ //addMultiplier
+ else if (args[0].equalsIgnoreCase("addMultiplier") || args[0].equalsIgnoreCase(
+ "changeMultiplier")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg addMultiplier [::playerName::] [::expIncrease::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, 3,
+ IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPermissionName("setMultiplier");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player target;
+ String multiplierInput;
+ if (args.length == 2) {
+ if (sender instanceof Player) {
+ target = (Player) sender;
+ multiplierInput = args[1];
+ } else {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper Arguments
}
+ } else {
+ String playerName = args[1];
+ multiplierInput = args[2];
- //createFakePlayers
- else if (args[0].equalsIgnoreCase("createFakePlayers") || args[0].equalsIgnoreCase("createFakeProfiles")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg createFakePlayers [#]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("createFakePlayers");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
+ //Target Online Check
+ target = plugin.getServer().getPlayer(playerName);
+ boolean targetOnline = isTargetOnline(target, sender);
+ if (!targetOnline) {
+ return true; //Target not online
+ }
+ }
- int numPlayers = getArgumentAsInteger(args[1]);
- if (numPlayers == Integer.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper input
- }
+ double multiplier = getArgumentAsDouble(multiplierInput);
+ if (multiplier == Double.MAX_VALUE) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true; //Improper argument (amount not integer)
+ }
- PlayerStatsFilePreparation playerStatsFilePreparation = new PlayerStatsFilePreparation();
- Random rand = new Random();
- for (int i = 0; i < numPlayers; i++) {
- String fakeName = "FakePlayer" + rand.nextInt(100000);
- UUID fakeUUID = UUID.fromString("badf"+UUID.randomUUID().toString().substring(4)); //"badf" hexadecimal identifier for "bad files"
- playerStatsFilePreparation.preparePlayerFile(fakeName,fakeUUID,false);
- }
+ ChangeStats setMultiplier = new ChangeStats(target);
+ setMultiplier.changeStat("global", 23, multiplier);
- }
+ }
- //removeFakePlayers
- else if (args[0].equalsIgnoreCase("deleteFakePlayers") || args[0].equalsIgnoreCase("deleteFakeProfiles") || args[0].equalsIgnoreCase("removeFakePlayers") || args[0].equalsIgnoreCase("removeFakeProfiles")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg deleteFakePlayers";
- CommandHelper commandHelper = new CommandHelper(sender,args,0,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("createFakePlayers");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
+ //flamePickToggle
+ else if (args[0].equalsIgnoreCase("toggleFlamePick") || args[0].equalsIgnoreCase(
+ "flamePickToggle")) {
+ return togglePerk("flamePickToggle", sender, args);
+ }
- File userdata = new File(Bukkit.getServer().getPluginManager().getPlugin("FreeRPG").getDataFolder(), File.separator + "PlayerDatabase");
- File[] allUsers = userdata.listFiles();
- for (File f : allUsers) {
- if (f.getName().substring(0,4).equalsIgnoreCase("badf")) {
- f.delete();
- }
- }
+ //flintToggle
+ else if (args[0].equalsIgnoreCase("toggleFlint") || args[0].equalsIgnoreCase("flintToggle")) {
+ return togglePerk("flintToggle", sender, args);
+ }
- }
+ //grappleToggle
+ else if (args[0].equalsIgnoreCase("toggleGrapple") || args[0].equalsIgnoreCase(
+ "grappleToggle")) {
+ return togglePerk("grappleToggle", sender, args);
+ }
- //Save FRPG Data
- else if (args[0].equalsIgnoreCase("thoroughSave")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg save";
- CommandHelper commandHelper = new CommandHelper(sender,args,0,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("saveStats");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
+ //HotRodToggle
+ else if (args[0].equalsIgnoreCase("toggleHotRod") || args[0].equalsIgnoreCase("hotRodToggle")) {
+ return togglePerk("hotRodToggle", sender, args);
+ }
- PeriodicSaving periodicSaving = new PeriodicSaving();
- new BukkitRunnable() {
- @Override
- public void run() {
- periodicSaving.saveAllStats(true);
- }
- }.runTaskAsynchronously(plugin);
+ //MegaDigToggle
+ else if (args[0].equalsIgnoreCase("toggleMegaDig") || args[0].equalsIgnoreCase(
+ "megaDigToggle")) {
+ return togglePerk("megaDigToggle", sender, args);
+ }
- }
-
- //Load in all players
- else if (args[0].equalsIgnoreCase("loadInAllPlayerFiles") || args[0].equalsIgnoreCase("loadInPlayerFiles")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg save";
- CommandHelper commandHelper = new CommandHelper(sender,args,0,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("saveStats");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- OfflinePlayerStatLoadIn offlinePlayerStatLoadIn = new OfflinePlayerStatLoadIn();
- offlinePlayerStatLoadIn.loadInAllOfflinePlayers();
-
- }
-
- //GiveEXP
- else if (args[0].equalsIgnoreCase("giveEXP") || args[0].equalsIgnoreCase("expGive")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg giveEXP [::playerName::] [::skillName::] [::exp::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,3,4,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("giveEXP");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player target;
- String skillNameInput;
- String expInput;
- if (args.length == 3) {
- if (sender instanceof Player) {
- target = (Player) sender;
- skillNameInput = args[1];
- expInput = args[2];
- } else {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper Arguments
- }
- } else {
- String playerName = args[1];
- skillNameInput = args[2];
- expInput = args[3];
-
- //Target Online Check
- target = plugin.getServer().getPlayer(playerName);
- boolean targetOnline = isTargetOnline(target,sender);
- if (!targetOnline) {
- return true; //Target not online
- }
- }
-
- int exp = getArgumentAsInteger(expInput);
- if (exp == Integer.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (exp not integer)
- }
-
- String[] labels_0 = {"digging","woodcutting","mining","farming","fishing","archery","beastMastery","swordsmanship","defense","axeMastery","repair","agility","alchemy","smelting","enchanting"};
- List labels_arr = Arrays.asList(labels_0);
- String skillName = UtilityMethods.convertStringToListCasing(labels_arr,skillNameInput);
- if (!labels_arr.contains(skillName)) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (skillName not valid)
- }
-
- if (exp < 0) {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- p.sendMessage(ChatColor.RED + lang.getString("onlyIncrease"));
- } else {
- sender.sendMessage("Please only increase exp with this command, otherwise, use /frpg statReset then /frpg giveEXP");
- }
- return true; //Improper argument (exp change not positive)
- }
-
- ChangeStats increaseStats = new ChangeStats(target);
- increaseStats.set_isCommand(true);
- increaseStats.changeEXP(skillName, exp);
- increaseStats.setTotalLevel();
- increaseStats.setTotalExperience();
- }
-
- //setLevel
- else if (args[0].equalsIgnoreCase("setLevel") || args[0].equalsIgnoreCase("levelSet")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg setLevel [::playerName::] [::skillName::] [::level::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,3,4,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("setLevel");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player target;
- String skillNameInput;
- String levelInput;
- if (args.length == 3) {
- if (sender instanceof Player) {
- target = (Player) sender;
- skillNameInput = args[1];
- levelInput = args[2];
- } else {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper Arguments
- }
- } else {
- String playerName = args[1];
- skillNameInput = args[2];
- levelInput = args[3];
-
- //Target Online Check
- target = plugin.getServer().getPlayer(playerName);
- boolean targetOnline = isTargetOnline(target,sender);
- if (!targetOnline) {
- return true; //Target not online
- }
- }
-
- int level = getArgumentAsInteger(levelInput);
- if (level == Integer.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (exp not integer)
- }
-
- String[] labels_0 = {"digging","woodcutting","mining","farming","fishing","archery","beastMastery","swordsmanship","defense","axeMastery","repair","agility","alchemy","smelting","enchanting"};
- List labels_arr = Arrays.asList(labels_0);
- String skillName = UtilityMethods.convertStringToListCasing(labels_arr,skillNameInput);
- if (!labels_arr.contains(skillName)) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (skillName not valid)
- }
-
- ChangeStats increaseStats = new ChangeStats(target);
- int exp = increaseStats.getEXPfromLevel(level);
- PlayerStats pStatClass = new PlayerStats(target);
- Map> pStat = pStatClass.getPlayerData();
- int currentExp = (int) pStat.get(skillName).get(1);
-
- if (exp <= currentExp) {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- p.sendMessage(ChatColor.RED + lang.getString("onlyIncrease"));
- } else {
- sender.sendMessage("Please only increase levels with this command, otherwise, use /frpg statReset then /frpg setLevel");
- }
- return true; //Improper argument (exp change not positive)
- }
-
- increaseStats.set_isCommand(true);
- increaseStats.changeEXP(skillName,exp-currentExp+1);
- increaseStats.setTotalLevel();
- increaseStats.setTotalExperience();
- }
-
- //statReset
- else if (args[0].equalsIgnoreCase("statReset") || args[0].equalsIgnoreCase("resetStat")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg statReset [::playerName::] [::skillName::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,3,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("statReset");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player target;
- String skillNameInput;
- if (args.length == 2) {
- if (sender instanceof Player) {
- target = (Player) sender;
- skillNameInput = args[1];
- } else {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper Arguments
- }
- } else {
- String playerName = args[1];
- skillNameInput = args[2];
-
- //Target Online Check
- target = plugin.getServer().getPlayer(playerName);
- boolean targetOnline = isTargetOnline(target,sender);
- if (!targetOnline) {
- return true; //Target not online
- }
- }
-
- String[] labels_0 = {"digging","woodcutting","mining","farming","fishing","archery",
- "beastMastery","swordsmanship","defense","axeMastery",
- "repair","agility","alchemy","smelting","enchanting",
- "global","all"};
- List labels_arr = Arrays.asList(labels_0);
- String skillName = UtilityMethods.convertStringToListCasing(labels_arr,skillNameInput);
- if (!labels_arr.contains(skillName)) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (skillName not valid)
- }
- ChangeStats changeStats = new ChangeStats(target);
- if (!skillName.equalsIgnoreCase("all")) {
- changeStats.resetStat(skillName);
- } else {
- for (String skillNameLabel : labels_arr) {
- if (!skillNameLabel.equalsIgnoreCase("all")) {
- changeStats.resetStat(skillNameLabel);
- }
- }
- }
-
- }
-
- //setSouls
- else if (args[0].equalsIgnoreCase("setSouls") || args[0].equalsIgnoreCase("soulsSet")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg setSouls [::playerName::] [::amount::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,3,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("setSouls");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player target;
- String soulsInput;
- if (args.length == 2) {
- if (sender instanceof Player) {
- target = (Player) sender;
- soulsInput = args[1];
- } else {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper Arguments
- }
- } else {
- String playerName = args[1];
- soulsInput = args[2];
-
- //Target Online Check
- target = plugin.getServer().getPlayer(playerName);
- boolean targetOnline = isTargetOnline(target,sender);
- if (!targetOnline) {
- return true; //Target not online
- }
- }
-
- int souls = getArgumentAsInteger(soulsInput);
- if (souls == Integer.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (souls not integer)
- }
-
- ChangeStats increaseStats = new ChangeStats(target);
- increaseStats.setStat("global",20,souls);
- }
-
- //setTokens
- else if (args[0].equalsIgnoreCase("setTokens") || args[0].equalsIgnoreCase("tokensSet")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg setTokens [::playerName::] global [::amount::] or /frpg setTokens [::playerName::] [::skillName::] skill/passive [::amount::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,3,5,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("setTokens");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player target;
- String skillNameInput;
- String tokenType;
- String amountInput;
- if (args.length == 3) { // Two inputs: tokenType and amount
- if (sender instanceof Player) {
- target = (Player) sender;
- tokenType = args[1];
- amountInput = args[2];
- skillNameInput = "global";
- } else {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper Arguments
- }
- } else if (args.length == 4) {
- if (args[2].equalsIgnoreCase("global")) { //Three inputs: PlayerName, token type, amount
- String playerName = args[1];
- tokenType = args[2];
- skillNameInput = "global";
- amountInput = args[3];
-
- //Target Online Check
- target = plugin.getServer().getPlayer(playerName);
- boolean targetOnline = isTargetOnline(target,sender);
- if (!targetOnline) {
- return true; //Target not online
- }
- } else { //Three inputs: Skillname, tokenType, amount
- target = (Player) sender;
- skillNameInput = args[1];
- tokenType = args[2];
- amountInput = args[3];
- }
- } else { //Four inputs: Playername, skillName, tokenType, amount
- String playerName = args[1];
- skillNameInput = args[2];
- tokenType = args[3];
- amountInput = args[4];
-
- //Target Online Check
- target = plugin.getServer().getPlayer(playerName);
- boolean targetOnline = isTargetOnline(target,sender);
- if (!targetOnline) {
- return true; //Target not online
- }
- }
-
- String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery", "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy", "smelting", "enchanting","global"};
- List labels_arr = Arrays.asList(labels_0);
- String skillName = UtilityMethods.convertStringToListCasing(labels_arr, skillNameInput);
- if (!labels_arr.contains(skillName)) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (skillName not valid)
- }
+ //PotionToggle
+ else if (args[0].equalsIgnoreCase("togglePotion") || args[0].equalsIgnoreCase("potionToggle")) {
+ return togglePerk("potionToggle", sender, args);
+ }
- int amount = getArgumentAsInteger(amountInput);
- if (amount == Integer.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (amount not integer)
- }
+ //SpeedToggle
+ else if (args[0].equalsIgnoreCase("toggleSpeed") || args[0].equalsIgnoreCase("speedToggle")) {
+ return togglePerk("speedToggle", sender, args);
+ }
- if (!(tokenType.equalsIgnoreCase("global") || tokenType.equalsIgnoreCase("skill") || tokenType.equalsIgnoreCase("passive"))) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper arguemnt (token type not global, skill, or passive)
- }
+ //VeinMinerToggle
+ else if (args[0].equalsIgnoreCase("toggleVeinMiner") || args[0].equalsIgnoreCase(
+ "veinMinerToggle")) {
+ return togglePerk("veinMinerToggle", sender, args);
+ }
- ChangeStats increaseStats = new ChangeStats(target);
- if (tokenType.equalsIgnoreCase("global")) {
- increaseStats.setStat("global", 1, amount);
- } else if (tokenType.equalsIgnoreCase("passive")){
- increaseStats.setStat(skillName, 2, amount);
- } else if (tokenType.equalsIgnoreCase("skill")) {
- increaseStats.setStat(skillName, 3, amount);
- }
+ //LeafBlowerToggle
+ else if (args[0].equalsIgnoreCase("toggleLeafBlower") || args[0].equalsIgnoreCase(
+ "leafBlowerToggle")) {
+ return togglePerk("leafBlowerToggle", sender, args);
+ }
- }
+ //holyAxeToggle
+ else if (args[0].equalsIgnoreCase("toggleHolyAxe") || args[0].equalsIgnoreCase(
+ "holyAxeToggle")) {
+ return togglePerk("holyAxeToggle", sender, args);
+ }
- //setMultiplier
- else if (args[0].equalsIgnoreCase("setMultiplier") || args[0].equalsIgnoreCase("multiplierSet")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg setMultiplier [::playerName::] [::expIncrease::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,3,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("setMultiplier");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player target;
- String multiplierInput;
- if (args.length == 2) {
- if (sender instanceof Player) {
- target = (Player) sender;
- multiplierInput = args[1];
- } else {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper Arguments
- }
- } else {
- String playerName = args[1];
- multiplierInput = args[2];
-
- //Target Online Check
- target = plugin.getServer().getPlayer(playerName);
- boolean targetOnline = isTargetOnline(target,sender);
- if (!targetOnline) {
- return true; //Target not online
- }
- }
+ //ConfigGUI
+ else if (args[0].equalsIgnoreCase("configGUI") || args[0].equalsIgnoreCase(
+ "configurationGUI")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg configGUI";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 1, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setCheckInBed(true);
+ commandHelper.setPermissionName("configGUI");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ PlayerStats pStatClass = new PlayerStats(p);
+ Map> pStat = pStatClass.getPlayerData();
+
+ //GuiWrapper
+ GuiWrapper gui = new GuiWrapper(p, "Configuration Window", 54);
+
+ //Back button
+ GuiItem backButton = new GuiItem(Material.ARROW, 45, gui);
+ backButton.setName(lang.getString("diggingPassiveTitle1"));
+ backButton.setDescription(lang.getString("diggingPassiveDesc1"));
+ gui.addItem(backButton);
+
+ //Simple Toggle Buttons
+ addToggleButton(p, gui, "::levelUpNotif::", Material.OAK_SIGN, 1,
+ 21); //Level up Notifications
+ addToggleButton(p, gui, "::abilityPreparationNotif::", Material.OAK_SIGN, 2,
+ 22); //Ability Prep Notifications
+ addToggleButton(p, gui, "::triggerAbilities::", Material.WOODEN_PICKAXE, 3,
+ 24); //Ability Trigger
+ addToggleButton(p, gui, "::showEXPBar::", Material.EXPERIENCE_BOTTLE, 4, 25); //EXP bar show
+
+ //Ability Duration Bar
+ GuiItem durationBar = new GuiItem(Material.CLOCK, 5, gui);
+ durationBar.setName(lang.getString("numberOfAbilityTimersDisplayed"));
+ gui.addItem(durationBar);
+
+ GuiItem durationBarToggle = new GuiItem(Material.LIME_DYE, 14, gui);
+ int numberOfBars = (int) pStat.get("global").get(28);
+ if (numberOfBars > 0) {
+ durationBarToggle.setNameColor(ChatColor.BOLD + ChatColor.GREEN.toString());
+ durationBarToggle.setName(String.valueOf(numberOfBars));
+ } else {
+ durationBarToggle.setNameColor(ChatColor.BOLD + ChatColor.RED.toString());
+ durationBarToggle.setName(String.valueOf(0));
+ durationBarToggle.setItemType(Material.GRAY_DYE);
+ }
+ durationBarToggle.setItemAmount(Math.max(1, numberOfBars));
+ gui.addItem(durationBarToggle);
+
+ //Sets all the items into the gui (This is redundant, but makes the code a bit clearer)
+ gui.setGui();
+
+ //LANGUAGES (sets all the language items into the gui)
+ StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
+ stringsAndOtherData.setLanguageItems(p, gui.getGui());
+
+ //Put the items in the inventory
+ gui.displayGuiForPlayer();
+ }
- double multiplier = getArgumentAsDouble(multiplierInput);
- if (multiplier == Double.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (amount not integer)
- }
+ //SkillConfigGUI
+ else if (args[0].equalsIgnoreCase("skillConfigGUI") || args[0].equalsIgnoreCase(
+ "skillConfigurationGUI") || args[0].equalsIgnoreCase("skillConfig")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg skillConfigGUI [::skillName::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setCheckInBed(true);
+ commandHelper.setPermissionName("skillConfigGUI");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ PlayerStats pStatClass = new PlayerStats(p);
+ ConfigLoad configLoad = new ConfigLoad();
+
+ String[] titles_0 = {"Digging", "Woodcutting", "Mining", "Farming", "Fishing", "Archery",
+ "Beast Mastery", "Swordsmanship", "Defense", "Axe Mastery", "Repair", "Agility",
+ "Alchemy", "Smelting", "Enchanting"};
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy",
+ "smelting", "enchanting"};
+ String[] passiveLabels0 = {"repair", "agility", "alchemy", "smelting", "enchanting"};
+ List labels = Arrays.asList(labels_0);
+ List passiveLabels = Arrays.asList(passiveLabels0);
+ String skillName = UtilityMethods.convertStringToListCasing(labels, args[1]);
+ if (!labels.contains(skillName)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true;
+ }
+
+ String skillTitle = titles_0[labels.indexOf(skillName)];
+ GuiWrapper gui = new GuiWrapper(p,
+ Bukkit.createInventory(p, 54, skillTitle + " Configuration"));
+
+ addToggleButton(p, gui, "::showEXPBar::", Material.EXPERIENCE_BOTTLE, 10,
+ pStatClass.isPlayerSkillExpBarOn(skillName)); //EXP bar show
+ if (!passiveLabels.contains(skillName)) {
+ addToggleButton(p, gui, "::triggerAbilities::", Material.WOODEN_PICKAXE, 11,
+ pStatClass.isPlayerSkillAbilityOn(skillName)); //Trigger Abilities
+ }
+
+ if (!configLoad.getAllowedSkillsMap()
+ .get(skillName)) { //Special condition to return (skill disabled)
+ p.sendMessage(ChatColor.RED + lang.getString("disabledSkill"));
+ return true;
+ }
+
+ //Back button
+ GuiItem backButton = new GuiItem(Material.ARROW, 45, gui);
+ backButton.setName(lang.getString("diggingPassiveTitle1"));
+ backButton.setDescription(lang.getString("diggingPassiveDesc1"));
+ gui.addItem(backButton);
+
+ GuiItem skillIcon = new GuiItem(Material.WOODEN_PICKAXE, 4, gui);
+ skillIcon.setNameColor(ChatColor.AQUA.toString() + ChatColor.BOLD.toString());
+ skillIcon.setName(lang.getString(skillName));
+
+ switch (skillName) {
+ case "digging":
+ skillIcon.setItemType(Material.IRON_SHOVEL);
+ //flintFinder
+ togglePerkSetGuiItem("flintToggle", p, gui);
+
+ //Mega Dig
+ togglePerkSetGuiItem("megaDigToggle", p, gui);
+ break;
+ case "woodcutting":
+ skillIcon.setItemType(Material.IRON_AXE);
+
+ //leafBlower
+ togglePerkSetGuiItem("leafBlowerToggle", p, gui);
+ break;
+ case "mining":
+ skillIcon.setItemType(Material.IRON_PICKAXE);
+
+ //veinMiner
+ togglePerkSetGuiItem("veinMinerToggle", p, gui);
+
+ break;
+ case "farming":
+ skillIcon.setItemType(Material.IRON_HOE);
+ break;
+ case "fishing":
+ skillIcon.setItemType(Material.FISHING_ROD);
+
+ //grappling Hook
+ togglePerkSetGuiItem("grappleToggle", p, gui);
+
+ //hot Rod
+ togglePerkSetGuiItem("hotRodToggle", p, gui);
+ break;
+ case "archery":
+ skillIcon.setItemType(Material.BOW);
+ break;
+ case "beastMastery":
+ skillIcon.setItemType(Material.BONE);
+ break;
+ case "swordsmanship":
+ skillIcon.setItemType(Material.IRON_SWORD);
+ break;
+ case "defense":
+ skillIcon.setItemType(Material.IRON_CHESTPLATE);
+ break;
+ case "axeMastery":
+ skillIcon.setItemType(Material.GOLDEN_AXE);
+
+ //Holy Axe
+ togglePerkSetGuiItem("holyAxeToggle", p, gui);
+ break;
+ case "repair":
+ skillIcon.setItemType(Material.ANVIL);
+ break;
+ case "agility":
+ skillIcon.setItemType(Material.LEATHER_LEGGINGS);
+
+ //gracefulFeet
+ togglePerkSetGuiItem("speedToggle", p, gui);
+
+ break;
+ case "alchemy":
+ skillIcon.setItemType(Material.POTION);
+
+ //potionMaster
+ togglePerkSetGuiItem("potionToggle", p, gui);
+ break;
+ case "smelting":
+ skillIcon.setItemType(Material.COAL);
+
+ //flamePick
+ togglePerkSetGuiItem("flamePickToggle", p, gui);
+ break;
+ case "enchanting":
+ skillIcon.setItemType(Material.ENCHANTING_TABLE);
+ break;
+ default:
+ break;
+
+ }
+ gui.addItem(skillIcon);
+
+ //Sets all the items into the gui (This is redundant, but makes the code a bit clearer)
+ gui.setGui();
+
+ //Put the items in the inventory
+ gui.displayGuiForPlayer();
+ }
- ChangeStats setMultiplier = new ChangeStats(target);
- setMultiplier.setStat("global",23,multiplier);
+ //ConfirmationGUI
+ else if (args[0].equalsIgnoreCase("confirmGUI") || args[0].equalsIgnoreCase(
+ "confirmationGUI")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg confirmationGUI [::skillName::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setCheckInBed(true);
+ commandHelper.setPermissionName("confirmGUI");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy",
+ "smelting", "enchanting", "global"};
+ String[] titles_0 = {lang.getString("digging"), lang.getString("woodcutting"),
+ lang.getString("mining"), lang.getString("farming"), lang.getString("fishing"),
+ lang.getString("archery"), lang.getString("beastMastery"),
+ lang.getString("swordsmanship"), lang.getString("defense"), lang.getString("axeMastery"),
+ lang.getString("repair"), lang.getString("agility"), lang.getString("alchemy"),
+ lang.getString("smelting"), lang.getString("enchanting"), lang.getString("global")};
+ List labels = Arrays.asList(labels_0);
+ String skillName = UtilityMethods.convertStringToListCasing(labels, args[1]);
+ if (!labels.contains(skillName)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true;
+ }
+ String skillTitle = titles_0[labels.indexOf(skillName)];
+ GuiWrapper gui = new GuiWrapper(p, Bukkit.createInventory(p, 54, "Confirmation Window"));
+
+ //Load souls data
+ ConfigLoad loadConfig = new ConfigLoad();
+ ArrayList soulsInfo = loadConfig.getSoulsInfo();
+ String refundCost = Integer.toString(soulsInfo.get(1));
+
+ //Information
+ GuiItem info = new GuiItem(Material.PAPER, 22, gui);
+ info.setNameColor(ChatColor.YELLOW.toString() + ChatColor.BOLD.toString());
+ info.setName(lang.getString("warning"));
+ //The following is pretty messy, but it's all just to format a long strong
+ String partOne =
+ lang.getString("refundSkillTree0") + " " + refundCost + " " + lang.getString("souls")
+ + " " + lang.getString("refundSkillTree1");
+ String partTwo = lang.getString("refundSkillTree2") + " " + ChatColor.WHITE.toString() +
+ skillTitle + ChatColor.RESET.toString() + ChatColor.ITALIC.toString()
+ + ChatColor.GRAY.toString() + " " + lang.getString("skill") + "?";
+ String refundWarningMessage = partOne + " " + partTwo;
+ StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
+ for (String line : stringsAndOtherData.getStringLines(refundWarningMessage)) {
+ info.addSpecialLoreLine(ChatColor.ITALIC + ChatColor.GRAY.toString() + line);
+ }
+ gui.addItem(info);
+
+ //Yes Button
+ GuiItem yes = new GuiItem(Material.LIME_TERRACOTTA, 38, gui);
+ yes.setNameColor(ChatColor.GREEN.toString() + ChatColor.BOLD.toString());
+ yes.setName(lang.getString("yes0"));
+ gui.addItem(yes);
+
+ //No Button
+ GuiItem no = new GuiItem(Material.RED_TERRACOTTA, 42, gui);
+ no.setNameColor(ChatColor.RED.toString() + ChatColor.BOLD.toString());
+ no.setName(lang.getString("no0"));
+ gui.addItem(no);
+
+ //Skill Item (Indicator)
+ GuiItem skillIcon = new GuiItem(Material.IRON_SHOVEL, 4, gui);
+ switch (skillName) {
+ case "digging":
+ skillIcon.setItemType(Material.IRON_SHOVEL);
+ break;
+ case "woodcutting":
+ skillIcon.setItemType(Material.IRON_AXE);
+ break;
+ case "mining":
+ skillIcon.setItemType(Material.IRON_PICKAXE);
+ break;
+ case "farming":
+ skillIcon.setItemType(Material.IRON_HOE);
+ break;
+ case "fishing":
+ skillIcon.setItemType(Material.FISHING_ROD);
+ break;
+ case "archery":
+ skillIcon.setItemType(Material.BOW);
+ break;
+ case "beastMastery":
+ skillIcon.setItemType(Material.BONE);
+ break;
+ case "swordsmanship":
+ skillIcon.setItemType(Material.IRON_SWORD);
+ break;
+ case "defense":
+ skillIcon.setItemType(Material.IRON_CHESTPLATE);
+ break;
+ case "axeMastery":
+ skillIcon.setItemType(Material.GOLDEN_AXE);
+ break;
+ case "repair":
+ skillIcon.setItemType(Material.ANVIL);
+ break;
+ case "agility":
+ skillIcon.setItemType(Material.LEATHER_LEGGINGS);
+ break;
+ case "alchemy":
+ skillIcon.setItemType(Material.POTION);
+ break;
+ case "smelting":
+ skillIcon.setItemType(Material.COAL);
+ break;
+ case "enchanting":
+ skillIcon.setItemType(Material.ENCHANTING_TABLE);
+ break;
+ default:
+ break;
+ }
+ skillIcon.setNameColor(ChatColor.AQUA.toString() + ChatColor.BOLD.toString());
+ skillIcon.setName(skillTitle);
+ gui.addItem(skillIcon);
+
+ //Sets all the items into the gui (This is redundant, but makes the code a bit clearer)
+ gui.setGui();
+
+ //Put the items in the inventory
+ gui.displayGuiForPlayer();
+ }
- }
+ //CraftingGUI
+ else if (args[0].equalsIgnoreCase("craftingGUI") || args[0].equalsIgnoreCase("recipeGUI")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg craftingRecipe [::skillName::[#]]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setCheckInBed(true);
+ commandHelper.setPermissionName("craftGUI");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ String[] labels_0 = {"archery1", "farming1", "farming2", "farming3", "farming4", "farming5",
+ "enchanting1", "enchanting2", "enchanting3", "enchanting4", "enchanting5",
+ "enchanting6", "enchanting7", "enchanting8", "enchanting9", "enchanting10",
+ "alchemy1", "alchemy2", "alchemy3", "alchemy4", "alchemy5"};
+ List labels = Arrays.asList(labels_0);
+ String identifier = UtilityMethods.convertStringToListCasing(labels, args[1]);
+ if (!labels.contains(identifier)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true;
+ }
+
+ ConfigLoad configLoad = new ConfigLoad();
+ Map craftingRecipes = configLoad.getCraftingRecipes();
+ ArrayList recipe;
+ ItemStack output;
+ if (identifier.equalsIgnoreCase("archery1")) {
+ CraftingRecipes craftingRecipesClass = new CraftingRecipes();
+ recipe = craftingRecipesClass.getTippedArrowRecipe();
+ output = new ItemStack(Material.TIPPED_ARROW, 8);
+ } else {
+ recipe = craftingRecipes.get(identifier).getRecipe();
+ output = craftingRecipes.get(identifier).getItemStack();
+ }
+
+ GuiWrapper gui = new GuiWrapper(p, Bukkit.createInventory(p, 54, "Crafting Recipe"));
+
+ //Back button
+ GuiItem backButton = new GuiItem(Material.ARROW, 45, gui);
+ backButton.setName(lang.getString("diggingPassiveTitle1"));
+ backButton.setDescription(lang.getString("diggingPassiveDesc1"));
+ gui.addItem(backButton);
+
+ //Crafting Tables
+ Integer[] indicies = {1, 2, 3, 4, 5, 10, 14, 19, 23, 28, 32, 37, 38, 39, 40, 41};
+
+ for (int i : indicies) {
+ GuiItem craftingTable = new GuiItem(Material.CRAFTING_TABLE, i, gui);
+ craftingTable.setName(ChatColor.WHITE.toString());
+ gui.addItem(craftingTable);
+ }
+
+ //Connectors
+ GuiItem connector = new GuiItem(Material.GLASS_PANE, 24, gui);
+ connector.setName(ChatColor.WHITE.toString());
+ gui.addItem(connector);
+
+ //Crafting Inputs and Output
+ Integer[] recipeIndices = {11, 12, 13, 20, 21, 22, 29, 30, 31};
+ for (int i = 0; i < 9; i++) {
+ if (recipe.get(i) != null && recipe.get(i) != Material.AIR) {
+ GuiItem recipePart = new GuiItem(recipe.get(i), recipeIndices[i], gui);
+ gui.addItem(recipePart);
+ }
+ }
+ GuiItem outputItem = new GuiItem(output, 25, gui);
+ gui.addItem(outputItem);
+
+ //Sets all the items into the gui (This is redundant, but makes the code a bit clearer)
+ gui.setGui();
+
+ //Put the items in the inventory
+ gui.displayGuiForPlayer();
+ }
- //addMultiplier
- else if (args[0].equalsIgnoreCase("addMultiplier") || args[0].equalsIgnoreCase("changeMultiplier")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg addMultiplier [::playerName::] [::expIncrease::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,3,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPermissionName("setMultiplier");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player target;
- String multiplierInput;
- if (args.length == 2) {
- if (sender instanceof Player) {
- target = (Player) sender;
- multiplierInput = args[1];
- } else {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper Arguments
- }
- } else {
- String playerName = args[1];
- multiplierInput = args[2];
-
- //Target Online Check
- target = plugin.getServer().getPlayer(playerName);
- boolean targetOnline = isTargetOnline(target,sender);
- if (!targetOnline) {
- return true; //Target not online
- }
- }
+ //MainGUI
+ else if (args[0].equalsIgnoreCase("mainGUI") || args[0].equalsIgnoreCase("skills")) {
+ if (sender instanceof Player) {
+ Player p = (Player) sender;
+ p.performCommand("frpg");
+ } else {
+ FreeRPG.log(Level.WARN, "You must be a player to perform this command");
+ }
+ }
- double multiplier = getArgumentAsDouble(multiplierInput);
- if (multiplier == Double.MAX_VALUE) {
- commandHelper.sendImproperArgumentsMessage();
- return true; //Improper argument (amount not integer)
- }
- ChangeStats setMultiplier = new ChangeStats(target);
- setMultiplier.changeStat("global",23,multiplier);
- }
+ /*
+ This next conditional is the biggest by far
+ It handles all the skill tree GUIs, which are the most adaptable with the most unique buttons
+ */
- //flamePickToggle
- else if (args[0].equalsIgnoreCase("toggleFlamePick") || args[0].equalsIgnoreCase("flamePickToggle")) {
- return togglePerk("flamePickToggle",sender,args);
- }
+ //SkillTreeGUI
+ else if (args[0].equalsIgnoreCase("skillTree") || args[0].equalsIgnoreCase("skillTreeGUI")) {
+ final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg skillTree [::skillName::]";
+ CommandHelper commandHelper = new CommandHelper(sender, args, 2, IMPROPER_ARGUMENTS_MESSSAGE);
+ commandHelper.setPlayerOnlyCommand(true);
+ commandHelper.setCheckInBed(true);
+ commandHelper.setPermissionName("skillsGUI");
+ if (!commandHelper.isProperCommand()) {
+ return true; //Command Restricted or Improper
+ }
+
+ Player p = (Player) sender;
+ LanguageSelector lang = new LanguageSelector(p);
+ PlayerStats pStatClass = new PlayerStats(p);
+ Map> pStatAll = pStatClass.getPlayerData();
+ ConfigLoad configLoad = new ConfigLoad();
+ StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
+
+ String[] titles_0 = {"Digging", "Woodcutting", "Mining", "Farming", "Fishing", "Archery",
+ "Beast Mastery", "Swordsmanship", "Defense", "Axe Mastery", "Repair", "Agility",
+ "Alchemy", "Smelting", "Enchanting", "Global"};
+ String[] labels_0 = {"digging", "woodcutting", "mining", "farming", "fishing", "archery",
+ "beastMastery", "swordsmanship", "defense", "axeMastery", "repair", "agility", "alchemy",
+ "smelting", "enchanting", "global"};
+ List labels_arr = Arrays.asList(labels_0);
+ String skillName = UtilityMethods.convertStringToListCasing(labels_arr, args[1]);
+
+ if (!labels_arr.contains(skillName)) {
+ commandHelper.sendImproperArgumentsMessage();
+ return true;
+ }
+ String skillTitle = titles_0[labels_arr.indexOf(skillName)];
- //flintToggle
- else if (args[0].equalsIgnoreCase("toggleFlint") || args[0].equalsIgnoreCase("flintToggle")) {
- return togglePerk("flintToggle",sender,args);
- }
+ if (!configLoad.getAllowedSkillsMap()
+ .get(skillName)) { //Special condition to return (skill disabled)
+ p.sendMessage(ChatColor.RED + lang.getString("disabledSkill"));
+ return true;
+ }
- //grappleToggle
- else if (args[0].equalsIgnoreCase("toggleGrapple") || args[0].equalsIgnoreCase("grappleToggle")) {
- return togglePerk("grappleToggle",sender,args);
- }
+ ArrayList soulsInfo = configLoad.getSoulsInfo();
+ String refundCost = Integer.toString(soulsInfo.get(1));
- //HotRodToggle
- else if (args[0].equalsIgnoreCase("toggleHotRod") || args[0].equalsIgnoreCase("hotRodToggle")) {
- return togglePerk("hotRodToggle",sender,args);
- }
+ Map perksMap = stringsAndOtherData.getPerksMap();
+ Map descriptionsMap = stringsAndOtherData.getDescriptionsMap();
+ Map passivePerksMap = stringsAndOtherData.getPassivePerksMap();
+ Map passiveDescriptionsMap = stringsAndOtherData.getPassiveDescriptionsMap();
+ setTranslatedSkillTreeInformation(p, skillName, perksMap, descriptionsMap, passivePerksMap,
+ passiveDescriptionsMap);
- //MegaDigToggle
- else if (args[0].equalsIgnoreCase("toggleMegaDig") || args[0].equalsIgnoreCase("megaDigToggle")) {
- return togglePerk("megaDigToggle",sender,args);
- }
+ //Create Gui
+ //GuiWrapper gui = new GuiWrapper(p,Bukkit.createInventory(p, 54,skillTitle));
+ Inventory gui = Bukkit.createInventory(p, 54, skillTitle);
- //PotionToggle
- else if (args[0].equalsIgnoreCase("togglePotion") || args[0].equalsIgnoreCase("potionToggle")) {
- return togglePerk("potionToggle",sender,args);
- }
+ if (labels_arr.indexOf(skillName) < 10) { //One of the 10 "main" skills
- //SpeedToggle
- else if (args[0].equalsIgnoreCase("toggleSpeed") || args[0].equalsIgnoreCase("speedToggle")) {
- return togglePerk("speedToggle",sender,args);
- }
+ //Sets colors of the skill icons to indicate whether the perk is locked/unlocked/in progress/completed
+ //setSkillTreeProgressMainSkill(p,skillName,gui);
- //VeinMinerToggle
- else if (args[0].equalsIgnoreCase("toggleVeinMiner") || args[0].equalsIgnoreCase("veinMinerToggle")) {
- return togglePerk("veinMinerToggle",sender,args);
- }
+ ArrayList pStats = pStatAll.get(skillName);
+ int skill_1a_level = (Integer) pStats.get(7);
+ int skill_1b_level = (Integer) pStats.get(8);
+ int skill_2a_level = (Integer) pStats.get(9);
+ int skill_2b_level = (Integer) pStats.get(10);
+ int skill_3a_level = (Integer) pStats.get(11);
+ int skill_3b_level = (Integer) pStats.get(12);
+ int skill_M_level = (Integer) pStats.get(13);
+
+ int tokens_P = (Integer) pStats.get(2);
+ int tokens_S = (Integer) pStats.get(3);
+ Number passive1 = pStats.get(4);
+ Number passive2 = pStats.get(5);
+ Number passive3 = pStats.get(6);
+
+ ItemStack skill_1a = new ItemStack(Material.PINK_TERRACOTTA);
+ ItemStack skill_2a = new ItemStack(Material.RED_TERRACOTTA);
+ ItemStack skill_3a = new ItemStack(Material.RED_TERRACOTTA);
+ ItemStack skill_1b = new ItemStack(Material.PINK_TERRACOTTA);
+ ItemStack skill_2b = new ItemStack(Material.RED_TERRACOTTA);
+ ItemStack skill_3b = new ItemStack(Material.RED_TERRACOTTA);
+ ItemStack skill_M = new ItemStack(Material.RED_TERRACOTTA);
- //LeafBlowerToggle
- else if (args[0].equalsIgnoreCase("toggleLeafBlower") || args[0].equalsIgnoreCase("leafBlowerToggle")) {
- return togglePerk("leafBlowerToggle",sender,args);
+ if (skill_1a_level == 0) {
+ skill_1a.setType(Material.PINK_TERRACOTTA);
+ } else if (skill_1a_level > 0 && skill_1a_level < 5) {
+ skill_1a.setType(Material.YELLOW_TERRACOTTA);
+ } else {
+ skill_1a.setType(Material.GREEN_TERRACOTTA);
}
- //holyAxeToggle
- else if (args[0].equalsIgnoreCase("toggleHolyAxe") || args[0].equalsIgnoreCase("holyAxeToggle")) {
- return togglePerk("holyAxeToggle",sender,args);
+ if (skill_1b_level == 0) {
+ skill_1b.setType(Material.PINK_TERRACOTTA);
+ } else if (skill_1b_level > 0 && skill_1b_level < 5) {
+ skill_1b.setType(Material.YELLOW_TERRACOTTA);
+ } else {
+ skill_1b.setType(Material.GREEN_TERRACOTTA);
}
- //ConfigGUI
- else if (args[0].equalsIgnoreCase("configGUI") || args[0].equalsIgnoreCase("configurationGUI")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg configGUI";
- CommandHelper commandHelper = new CommandHelper(sender,args,1,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setCheckInBed(true);
- commandHelper.setPermissionName("configGUI");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStat = pStatClass.getPlayerData();
-
- //GuiWrapper
- GuiWrapper gui = new GuiWrapper(p,"Configuration Window",54);
-
- //Back button
- GuiItem backButton = new GuiItem(Material.ARROW,45,gui);
- backButton.setName(lang.getString("diggingPassiveTitle1"));
- backButton.setDescription(lang.getString("diggingPassiveDesc1"));
- gui.addItem(backButton);
-
- //Simple Toggle Buttons
- addToggleButton(p,gui,"::levelUpNotif::",Material.OAK_SIGN,1,21); //Level up Notifications
- addToggleButton(p,gui,"::abilityPreparationNotif::",Material.OAK_SIGN,2,22); //Ability Prep Notifications
- addToggleButton(p,gui,"::triggerAbilities::",Material.WOODEN_PICKAXE,3,24); //Ability Trigger
- addToggleButton(p,gui,"::showEXPBar::",Material.EXPERIENCE_BOTTLE,4,25); //EXP bar show
-
- //Ability Duration Bar
- GuiItem durationBar = new GuiItem(Material.CLOCK,5,gui);
- durationBar.setName(lang.getString("numberOfAbilityTimersDisplayed"));
- gui.addItem(durationBar);
-
- GuiItem durationBarToggle = new GuiItem(Material.LIME_DYE,14,gui);
- int numberOfBars = (int) pStat.get("global").get(28);
- if (numberOfBars > 0) {
- durationBarToggle.setNameColor(ChatColor.BOLD + ChatColor.GREEN.toString());
- durationBarToggle.setName(String.valueOf(numberOfBars));
- }
- else {
- durationBarToggle.setNameColor(ChatColor.BOLD + ChatColor.RED.toString());
- durationBarToggle.setName(String.valueOf(0));
- durationBarToggle.setItemType(Material.GRAY_DYE);
- }
- durationBarToggle.setItemAmount(Math.max(1,numberOfBars));
- gui.addItem(durationBarToggle);
-
- //Sets all the items into the gui (This is redundant, but makes the code a bit clearer)
- gui.setGui();
-
- //LANGUAGES (sets all the language items into the gui)
- StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
- stringsAndOtherData.setLanguageItems(p,gui.getGui());
-
- //Put the items in the inventory
- gui.displayGuiForPlayer();
+ if (skill_2a_level == 0) {
+ if (skill_1a_level >= 2) {
+ skill_2a.setType(Material.PINK_TERRACOTTA);
+ }
+ } else if (skill_2a_level > 0 && skill_2a_level < 5) {
+ skill_2a.setType(Material.YELLOW_TERRACOTTA);
+ } else {
+ skill_2a.setType(Material.GREEN_TERRACOTTA);
}
- //SkillConfigGUI
- else if (args[0].equalsIgnoreCase("skillConfigGUI") || args[0].equalsIgnoreCase("skillConfigurationGUI") || args[0].equalsIgnoreCase("skillConfig")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg skillConfigGUI [::skillName::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setCheckInBed(true);
- commandHelper.setPermissionName("skillConfigGUI");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- PlayerStats pStatClass = new PlayerStats(p);
- ConfigLoad configLoad = new ConfigLoad();
-
- String[] titles_0 = {"Digging","Woodcutting","Mining","Farming","Fishing","Archery","Beast Mastery","Swordsmanship","Defense","Axe Mastery","Repair","Agility","Alchemy","Smelting","Enchanting"};
- String[] labels_0 = {"digging","woodcutting","mining","farming","fishing","archery","beastMastery","swordsmanship","defense","axeMastery","repair","agility","alchemy","smelting","enchanting"};
- String[] passiveLabels0 = {"repair","agility","alchemy","smelting","enchanting"};
- List labels = Arrays.asList(labels_0);
- List passiveLabels = Arrays.asList(passiveLabels0);
- String skillName = UtilityMethods.convertStringToListCasing(labels,args[1]);
- if (!labels.contains(skillName) ) {
- commandHelper.sendImproperArgumentsMessage();
- return true;
- }
-
- String skillTitle = titles_0[labels.indexOf(skillName)];
- GuiWrapper gui = new GuiWrapper(p,Bukkit.createInventory(p, 54, skillTitle + " Configuration"));
-
- addToggleButton(p,gui,"::showEXPBar::",Material.EXPERIENCE_BOTTLE,10,pStatClass.isPlayerSkillExpBarOn(skillName)); //EXP bar show
- if (!passiveLabels.contains(skillName)) {
- addToggleButton(p,gui,"::triggerAbilities::",Material.WOODEN_PICKAXE,11,pStatClass.isPlayerSkillAbilityOn(skillName)); //Trigger Abilities
- }
-
- if (!configLoad.getAllowedSkillsMap().get(skillName)) { //Special condition to return (skill disabled)
- p.sendMessage(ChatColor.RED + lang.getString("disabledSkill"));
- return true;
- }
-
- //Back button
- GuiItem backButton = new GuiItem(Material.ARROW,45,gui);
- backButton.setName(lang.getString("diggingPassiveTitle1"));
- backButton.setDescription(lang.getString("diggingPassiveDesc1"));
- gui.addItem(backButton);
-
- GuiItem skillIcon = new GuiItem(Material.WOODEN_PICKAXE,4,gui);
- skillIcon.setNameColor(ChatColor.AQUA.toString() + ChatColor.BOLD.toString());
- skillIcon.setName(lang.getString(skillName));
-
- switch (skillName) {
- case "digging":
- skillIcon.setItemType(Material.IRON_SHOVEL);
- //flintFinder
- togglePerkSetGuiItem("flintToggle",p,gui);
-
- //Mega Dig
- togglePerkSetGuiItem("megaDigToggle",p,gui);
- break;
- case "woodcutting":
- skillIcon.setItemType(Material.IRON_AXE);
-
- //leafBlower
- togglePerkSetGuiItem("leafBlowerToggle",p,gui);
- break;
- case "mining":
- skillIcon.setItemType(Material.IRON_PICKAXE);
-
- //veinMiner
- togglePerkSetGuiItem("veinMinerToggle",p,gui);
-
- break;
- case "farming":
- skillIcon.setItemType(Material.IRON_HOE);
- break;
- case "fishing":
- skillIcon.setItemType(Material.FISHING_ROD);
-
- //grappling Hook
- togglePerkSetGuiItem("grappleToggle",p,gui);
-
- //hot Rod
- togglePerkSetGuiItem("hotRodToggle",p,gui);
- break;
- case "archery":
- skillIcon.setItemType(Material.BOW);
- break;
- case "beastMastery":
- skillIcon.setItemType(Material.BONE);
- break;
- case "swordsmanship":
- skillIcon.setItemType(Material.IRON_SWORD);
- break;
- case "defense":
- skillIcon.setItemType(Material.IRON_CHESTPLATE);
- break;
- case "axeMastery":
- skillIcon.setItemType(Material.GOLDEN_AXE);
-
- //Holy Axe
- togglePerkSetGuiItem("holyAxeToggle",p,gui);
- break;
- case "repair":
- skillIcon.setItemType(Material.ANVIL);
- break;
- case "agility":
- skillIcon.setItemType(Material.LEATHER_LEGGINGS);
-
- //gracefulFeet
- togglePerkSetGuiItem("speedToggle",p,gui);
-
- break;
- case "alchemy":
- skillIcon.setItemType(Material.POTION);
-
- //potionMaster
- togglePerkSetGuiItem("potionToggle",p,gui);
- break;
- case "smelting":
- skillIcon.setItemType(Material.COAL);
-
- //flamePick
- togglePerkSetGuiItem("flamePickToggle",p,gui);
- break;
- case "enchanting":
- skillIcon.setItemType(Material.ENCHANTING_TABLE);
- break;
- default:
- break;
-
- }
- gui.addItem(skillIcon);
-
- //Sets all the items into the gui (This is redundant, but makes the code a bit clearer)
- gui.setGui();
-
- //Put the items in the inventory
- gui.displayGuiForPlayer();
+ if (skill_2b_level == 0) {
+ if (skill_1b_level >= 2) {
+ skill_2b.setType(Material.PINK_TERRACOTTA);
+ }
+ } else if (skill_2b_level > 0 && skill_2b_level < 5) {
+ skill_2b.setType(Material.YELLOW_TERRACOTTA);
+ } else {
+ skill_2b.setType(Material.GREEN_TERRACOTTA);
}
- //ConfirmationGUI
- else if (args[0].equalsIgnoreCase("confirmGUI") || args[0].equalsIgnoreCase("confirmationGUI")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg confirmationGUI [::skillName::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setCheckInBed(true);
- commandHelper.setPermissionName("confirmGUI");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- String[] labels_0 = {"digging","woodcutting","mining","farming","fishing","archery","beastMastery","swordsmanship","defense","axeMastery","repair","agility","alchemy","smelting","enchanting","global"};
- String[] titles_0 = {lang.getString("digging"),lang.getString("woodcutting"),lang.getString("mining"),lang.getString("farming"),lang.getString("fishing"),lang.getString("archery"),lang.getString("beastMastery"),lang.getString("swordsmanship"),lang.getString("defense"),lang.getString("axeMastery"),lang.getString("repair"),lang.getString("agility"),lang.getString("alchemy"),lang.getString("smelting"),lang.getString("enchanting"),lang.getString("global")};
- List labels = Arrays.asList(labels_0);
- String skillName = UtilityMethods.convertStringToListCasing(labels,args[1]);
- if (!labels.contains(skillName) ) {
- commandHelper.sendImproperArgumentsMessage();
- return true;
- }
- String skillTitle = titles_0[labels.indexOf(skillName)];
- GuiWrapper gui = new GuiWrapper(p,Bukkit.createInventory(p, 54, "Confirmation Window"));
-
- //Load souls data
- ConfigLoad loadConfig = new ConfigLoad();
- ArrayList soulsInfo = loadConfig.getSoulsInfo();
- String refundCost = Integer.toString(soulsInfo.get(1));
-
- //Information
- GuiItem info = new GuiItem(Material.PAPER,22,gui);
- info.setNameColor(ChatColor.YELLOW.toString() + ChatColor.BOLD.toString());
- info.setName(lang.getString("warning"));
- //The following is pretty messy, but it's all just to format a long strong
- String partOne = lang.getString("refundSkillTree0") + " " + refundCost + " " + lang.getString("souls") + " " + lang.getString("refundSkillTree1");
- String partTwo = lang.getString("refundSkillTree2") + " " + ChatColor.WHITE.toString() +
- skillTitle + ChatColor.RESET.toString() + ChatColor.ITALIC.toString() + ChatColor.GRAY.toString()+ " " +lang.getString("skill") +"?";
- String refundWarningMessage = partOne + " " + partTwo;
- StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
- for (String line : stringsAndOtherData.getStringLines(refundWarningMessage)) {
- info.addSpecialLoreLine(ChatColor.ITALIC+ChatColor.GRAY.toString() + line);
- }
- gui.addItem(info);
-
- //Yes Button
- GuiItem yes = new GuiItem(Material.LIME_TERRACOTTA,38,gui);
- yes.setNameColor(ChatColor.GREEN.toString() + ChatColor.BOLD.toString());
- yes.setName(lang.getString("yes0"));
- gui.addItem(yes);
-
- //No Button
- GuiItem no = new GuiItem(Material.RED_TERRACOTTA,42,gui);
- no.setNameColor(ChatColor.RED.toString() + ChatColor.BOLD.toString());
- no.setName(lang.getString("no0"));
- gui.addItem(no);
-
- //Skill Item (Indicator)
- GuiItem skillIcon = new GuiItem(Material.IRON_SHOVEL,4,gui);
- switch (skillName) {
- case "digging":
- skillIcon.setItemType(Material.IRON_SHOVEL);
- break;
- case "woodcutting":
- skillIcon.setItemType(Material.IRON_AXE);
- break;
- case "mining":
- skillIcon.setItemType(Material.IRON_PICKAXE);
- break;
- case "farming":
- skillIcon.setItemType(Material.IRON_HOE);
- break;
- case "fishing":
- skillIcon.setItemType(Material.FISHING_ROD);
- break;
- case "archery":
- skillIcon.setItemType(Material.BOW);
- break;
- case "beastMastery":
- skillIcon.setItemType(Material.BONE);
- break;
- case "swordsmanship":
- skillIcon.setItemType(Material.IRON_SWORD);
- break;
- case "defense":
- skillIcon.setItemType(Material.IRON_CHESTPLATE);
- break;
- case "axeMastery":
- skillIcon.setItemType(Material.GOLDEN_AXE);
- break;
- case "repair":
- skillIcon.setItemType(Material.ANVIL);
- break;
- case "agility":
- skillIcon.setItemType(Material.LEATHER_LEGGINGS);
- break;
- case "alchemy":
- skillIcon.setItemType(Material.POTION);
- break;
- case "smelting":
- skillIcon.setItemType(Material.COAL);
- break;
- case "enchanting":
- skillIcon.setItemType(Material.ENCHANTING_TABLE);
- break;
- default:
- break;
- }
- skillIcon.setNameColor(ChatColor.AQUA.toString() + ChatColor.BOLD.toString());
- skillIcon.setName(skillTitle);
- gui.addItem(skillIcon);
-
- //Sets all the items into the gui (This is redundant, but makes the code a bit clearer)
- gui.setGui();
-
- //Put the items in the inventory
- gui.displayGuiForPlayer();
- }
-
- //CraftingGUI
- else if (args[0].equalsIgnoreCase("craftingGUI") || args[0].equalsIgnoreCase("recipeGUI")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg craftingRecipe [::skillName::[#]]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setCheckInBed(true);
- commandHelper.setPermissionName("craftGUI");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- String[] labels_0 = {"archery1", "farming1", "farming2", "farming3", "farming4", "farming5",
- "enchanting1", "enchanting2", "enchanting3", "enchanting4", "enchanting5",
- "enchanting6", "enchanting7", "enchanting8", "enchanting9", "enchanting10",
- "alchemy1","alchemy2","alchemy3","alchemy4","alchemy5"};
- List labels = Arrays.asList(labels_0);
- String identifier = UtilityMethods.convertStringToListCasing(labels,args[1]);
- if (!labels.contains(identifier) ) {
- commandHelper.sendImproperArgumentsMessage();
- return true;
- }
-
- ConfigLoad configLoad = new ConfigLoad();
- Map craftingRecipes = configLoad.getCraftingRecipes();
- ArrayList recipe;
- ItemStack output;
- if (identifier.equalsIgnoreCase("archery1")) {
- CraftingRecipes craftingRecipesClass = new CraftingRecipes();
- recipe = craftingRecipesClass.getTippedArrowRecipe();
- output = new ItemStack(Material.TIPPED_ARROW, 8);
- } else {
- recipe = craftingRecipes.get(identifier).getRecipe();
- output = craftingRecipes.get(identifier).getItemStack();
- }
-
-
- GuiWrapper gui = new GuiWrapper(p,Bukkit.createInventory(p, 54, "Crafting Recipe"));
-
- //Back button
- GuiItem backButton = new GuiItem(Material.ARROW,45,gui);
- backButton.setName(lang.getString("diggingPassiveTitle1"));
- backButton.setDescription(lang.getString("diggingPassiveDesc1"));
- gui.addItem(backButton);
-
- //Crafting Tables
- Integer[] indicies = {1,2,3,4,5,10,14,19,23,28,32,37,38,39,40,41};
-
- for (int i : indicies) {
- GuiItem craftingTable = new GuiItem(Material.CRAFTING_TABLE,i,gui);
- craftingTable.setName(ChatColor.WHITE.toString());
- gui.addItem(craftingTable);
- }
-
- //Connectors
- GuiItem connector = new GuiItem(Material.GLASS_PANE,24,gui);
- connector.setName(ChatColor.WHITE.toString());
- gui.addItem(connector);
-
- //Crafting Inputs and Output
- Integer[] recipeIndices = {11,12,13,20,21,22,29,30,31};
- for (int i=0; i <9; i++) {
- if (recipe.get(i) != null && recipe.get(i) != Material.AIR) {
- GuiItem recipePart = new GuiItem(recipe.get(i), recipeIndices[i], gui);
- gui.addItem(recipePart);
- }
- }
- GuiItem outputItem = new GuiItem(output,25,gui);
- gui.addItem(outputItem);
-
-
- //Sets all the items into the gui (This is redundant, but makes the code a bit clearer)
- gui.setGui();
-
- //Put the items in the inventory
- gui.displayGuiForPlayer();
+ if (skill_3a_level == 0) {
+ if (skill_2a_level >= 2) {
+ skill_3a.setType(Material.PINK_TERRACOTTA);
+ }
+ } else {
+ skill_3a.setType(Material.GREEN_TERRACOTTA);
}
- //MainGUI
- else if (args[0].equalsIgnoreCase("mainGUI") || args[0].equalsIgnoreCase("skills")) {
- if (sender instanceof Player) {
- Player p = (Player) sender;
- p.performCommand("frpg");
- }
- else {
- System.out.println("You must be a player to perform this command");
- }
+ if (skill_3b_level == 0) {
+ if (skill_2b_level >= 2) {
+ skill_3b.setType(Material.PINK_TERRACOTTA);
+ }
+ } else {
+ skill_3b.setType(Material.GREEN_TERRACOTTA);
}
-
-
- /*
- This next conditional is the biggest by far
- It handles all the skill tree GUIs, which are the most adaptable with the most unique buttons
- */
-
-
- //SkillTreeGUI
- else if (args[0].equalsIgnoreCase("skillTree") || args[0].equalsIgnoreCase("skillTreeGUI")) {
- final String IMPROPER_ARGUMENTS_MESSSAGE = " /frpg skillTree [::skillName::]";
- CommandHelper commandHelper = new CommandHelper(sender,args,2,IMPROPER_ARGUMENTS_MESSSAGE);
- commandHelper.setPlayerOnlyCommand(true);
- commandHelper.setCheckInBed(true);
- commandHelper.setPermissionName("skillsGUI");
- if (!commandHelper.isProperCommand()) {
- return true; //Command Restricted or Improper
- }
-
- Player p = (Player) sender;
- LanguageSelector lang = new LanguageSelector(p);
- PlayerStats pStatClass = new PlayerStats(p);
- Map> pStatAll = pStatClass.getPlayerData();
- ConfigLoad configLoad = new ConfigLoad();
- StringsAndOtherData stringsAndOtherData = new StringsAndOtherData();
-
-
- String[] titles_0 = {"Digging","Woodcutting","Mining","Farming","Fishing","Archery","Beast Mastery","Swordsmanship","Defense","Axe Mastery","Repair","Agility","Alchemy","Smelting","Enchanting","Global"};
- String[] labels_0 = {"digging","woodcutting","mining","farming","fishing","archery","beastMastery","swordsmanship","defense","axeMastery","repair","agility","alchemy","smelting","enchanting","global"};
- List labels_arr = Arrays.asList(labels_0);
- String skillName = UtilityMethods.convertStringToListCasing(labels_arr,args[1]);
-
-
- if (!labels_arr.contains(skillName) ) {
- commandHelper.sendImproperArgumentsMessage();
- return true;
- }
- String skillTitle = titles_0[labels_arr.indexOf(skillName)];
-
- if (!configLoad.getAllowedSkillsMap().get(skillName)) { //Special condition to return (skill disabled)
- p.sendMessage(ChatColor.RED + lang.getString("disabledSkill"));
- return true;
+ if (skill_M_level == 0) {
+ if (skill_1a_level + skill_1b_level + skill_2a_level + skill_2b_level + skill_3a_level
+ + skill_3b_level >= 10) {
+ skill_M.setType(Material.PINK_TERRACOTTA);
+ }
+ } else {
+ skill_M.setType(Material.GREEN_TERRACOTTA);
+ }
+
+ //Beginning state of the menu
+ ItemStack[] menu_items = {skill_1a, skill_1b, skill_2a, skill_2b, skill_3a, skill_3b,
+ skill_M};
+ String[] labels = perksMap.get(skillName);
+ String[] lores_line2 = descriptionsMap.get(skillName);
+
+ //Initialize some varibales for use
+ String desc = "";
+ Map customRecipeMap = configLoad.getCraftingRecipes();
+
+ //Make changes to some skills independent of level
+ if (skillName.equalsIgnoreCase("woodcutting")) {
+ ArrayList timberBreakLimits = configLoad.getTimberBreakLimits();
+ String timberBreakLimitInitial = String.valueOf(timberBreakLimits.get(0));
+ String timberBreakLimitUpgraded = String.valueOf(timberBreakLimits.get(1));
+ String newLore0 = stringsAndOtherData.replaceIfPresent(lores_line2[4], "64",
+ timberBreakLimitInitial);
+ String newLore1 = stringsAndOtherData.replaceIfPresent(newLore0, "128",
+ timberBreakLimitUpgraded);
+ lores_line2[4] = newLore1;
+ }
+
+ int special_index = 0;
+ switch (skillName) {
+ case "mining":
+ special_index = 0;
+ switch (skill_1a_level) {
+ case 0:
+ desc = lang.getString("miningPerkDesc0_1");
+ lores_line2[special_index] = desc;
+ break;
+ case 1:
+ desc = lang.getString("miningPerkDesc0_2");
+ lores_line2[special_index] = desc;
+ break;
+ case 2:
+ desc = lang.getString("miningPerkDesc0_3");
+ lores_line2[special_index] = desc;
+ break;
+ case 3:
+ desc = lang.getString("miningPerkDesc0_4");
+ lores_line2[special_index] = desc;
+ break;
+ case 4:
+ desc = lang.getString("miningPerkDesc0_5");
+ lores_line2[special_index] = desc;
+ break;
+ default:
+ break;
}
-
- ArrayList soulsInfo = configLoad.getSoulsInfo();
- String refundCost = Integer.toString(soulsInfo.get(1));
-
- Map perksMap = stringsAndOtherData.getPerksMap();
- Map descriptionsMap = stringsAndOtherData.getDescriptionsMap();
- Map passivePerksMap = stringsAndOtherData.getPassivePerksMap();
- Map passiveDescriptionsMap = stringsAndOtherData.getPassiveDescriptionsMap();
- setTranslatedSkillTreeInformation(p,skillName,perksMap,descriptionsMap,passivePerksMap,passiveDescriptionsMap);
-
- //Create Gui
- //GuiWrapper gui = new GuiWrapper(p,Bukkit.createInventory(p, 54,skillTitle));
- Inventory gui = Bukkit.createInventory(p, 54,skillTitle);
-
- if (labels_arr.indexOf(skillName) < 10) { //One of the 10 "main" skills
-
- //Sets colors of the skill icons to indicate whether the perk is locked/unlocked/in progress/completed
- //setSkillTreeProgressMainSkill(p,skillName,gui);
-
- ArrayList pStats = pStatAll.get(skillName);
- int skill_1a_level = (Integer) pStats.get(7);
- int skill_1b_level = (Integer) pStats.get(8);
- int skill_2a_level = (Integer) pStats.get(9);
- int skill_2b_level = (Integer) pStats.get(10);
- int skill_3a_level = (Integer) pStats.get(11);
- int skill_3b_level = (Integer) pStats.get(12);
- int skill_M_level = (Integer) pStats.get(13);
-
- int tokens_P = (Integer) pStats.get(2);
- int tokens_S = (Integer) pStats.get(3);
- Number passive1 = pStats.get(4);
- Number passive2 = pStats.get(5);
- Number passive3 = pStats.get(6);
-
- ItemStack skill_1a = new ItemStack(Material.PINK_TERRACOTTA);
- ItemStack skill_2a = new ItemStack(Material.RED_TERRACOTTA);
- ItemStack skill_3a = new ItemStack(Material.RED_TERRACOTTA);
- ItemStack skill_1b = new ItemStack(Material.PINK_TERRACOTTA);
- ItemStack skill_2b = new ItemStack(Material.RED_TERRACOTTA);
- ItemStack skill_3b = new ItemStack(Material.RED_TERRACOTTA);
- ItemStack skill_M = new ItemStack(Material.RED_TERRACOTTA);
-
- if (skill_1a_level == 0) {
- skill_1a.setType(Material.PINK_TERRACOTTA);
- }
- else if (skill_1a_level > 0 && skill_1a_level < 5) {
- skill_1a.setType(Material.YELLOW_TERRACOTTA);
- }
- else {
- skill_1a.setType(Material.GREEN_TERRACOTTA);
- }
-
-
- if (skill_1b_level == 0) {
- skill_1b.setType(Material.PINK_TERRACOTTA);
- }
- else if (skill_1b_level > 0 && skill_1b_level < 5) {
- skill_1b.setType(Material.YELLOW_TERRACOTTA);
- }
- else {
- skill_1b.setType(Material.GREEN_TERRACOTTA);
- }
-
-
- if (skill_2a_level == 0) {
- if (skill_1a_level >= 2) {
- skill_2a.setType(Material.PINK_TERRACOTTA);
- }
- }
- else if (skill_2a_level > 0 && skill_2a_level < 5) {
- skill_2a.setType(Material.YELLOW_TERRACOTTA);
- }
- else {
- skill_2a.setType(Material.GREEN_TERRACOTTA);
- }
-
-
- if (skill_2b_level == 0) {
- if (skill_1b_level >= 2) {
- skill_2b.setType(Material.PINK_TERRACOTTA);
- }
- }
- else if (skill_2b_level > 0 && skill_2b_level < 5) {
- skill_2b.setType(Material.YELLOW_TERRACOTTA);
- }
- else {
- skill_2b.setType(Material.GREEN_TERRACOTTA);
- }
-
-
- if (skill_3a_level == 0) {
- if (skill_2a_level >= 2) {
- skill_3a.setType(Material.PINK_TERRACOTTA);
- }
- }
- else {
- skill_3a.setType(Material.GREEN_TERRACOTTA);
- }
-
-
- if (skill_3b_level == 0) {
- if (skill_2b_level >= 2) {
- skill_3b.setType(Material.PINK_TERRACOTTA);
- }
- }
- else {
- skill_3b.setType(Material.GREEN_TERRACOTTA);
- }
-
- if (skill_M_level == 0) {
- if (skill_1a_level+skill_1b_level+skill_2a_level+skill_2b_level+skill_3a_level+skill_3b_level >=10) {
- skill_M.setType(Material.PINK_TERRACOTTA);
- }
- }
- else {
- skill_M.setType(Material.GREEN_TERRACOTTA);
- }
-
- //Beginning state of the menu
- ItemStack[] menu_items = {skill_1a,skill_1b,skill_2a,skill_2b,skill_3a,skill_3b,skill_M};
- String[] labels = perksMap.get(skillName);
- String[] lores_line2 = descriptionsMap.get(skillName);
-
- //Initialize some varibales for use
- String desc = "";
- Map customRecipeMap = configLoad.getCraftingRecipes();
-
- //Make changes to some skills independent of level
- if (skillName.equalsIgnoreCase("woodcutting")) {
- ArrayList timberBreakLimits = configLoad.getTimberBreakLimits();
- String timberBreakLimitInitial = String.valueOf(timberBreakLimits.get(0));
- String timberBreakLimitUpgraded = String.valueOf(timberBreakLimits.get(1));
- String newLore0 = stringsAndOtherData.replaceIfPresent(lores_line2[4],"64",timberBreakLimitInitial);
- String newLore1 = stringsAndOtherData.replaceIfPresent(newLore0,"128",timberBreakLimitUpgraded);
- lores_line2[4] = newLore1;
- }
-
- int special_index = 0;
- switch (skillName){
- case "mining":
- special_index = 0;
- switch (skill_1a_level) {
- case 0:
- desc = lang.getString("miningPerkDesc0_1");
- lores_line2[special_index] = desc;
- break;
- case 1:
- desc = lang.getString("miningPerkDesc0_2");
- lores_line2[special_index] = desc;
- break;
- case 2:
- desc = lang.getString("miningPerkDesc0_3");
- lores_line2[special_index] = desc;
- break;
- case 3:
- desc = lang.getString("miningPerkDesc0_4");
- lores_line2[special_index] = desc;
- break;
- case 4:
- desc = lang.getString("miningPerkDesc0_5");
- lores_line2[special_index] = desc;
- break;
- default:
- break;
- }
- break;
- case "woodcutting":
- special_index = 3;
- desc = lang.getString("woodcuttingPerkDesc3_1") + " ";
- ArrayList