From 577547b53a8ee72b9ffa8f90d2a808846de79fb4 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Thu, 18 May 2023 10:23:03 +0200 Subject: [PATCH 01/51] Fix git connection URL in pom.xml https://maven.apache.org/scm/git.html --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b23df24..4e8e806 100644 --- a/pom.xml +++ b/pom.xml @@ -31,7 +31,7 @@ https://github.com/songoda/EpicAnchors - scm:git:git:github.com/songoda/EpicAnchors.git + scm:git:git://github.com/songoda/EpicAnchors.git From d312c6c578b8f593a5d9a7521a9f1fa98ed7e39b Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Thu, 18 May 2023 11:08:23 +0200 Subject: [PATCH 02/51] Updates Dependabot, .editorconfig, .gitignore, FUNDING.yml Based on craftaro/GH-Commons --- .editorconfig | 301 ++--------------------------------------- .github/FUNDING.yml | 12 +- .github/dependabot.yml | 20 ++- .gitignore | 16 ++- 4 files changed, 32 insertions(+), 317 deletions(-) diff --git a/.editorconfig b/.editorconfig index 9737e6f..f7c773b 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,3 +1,6 @@ +root = true + + [*] charset = utf-8 end_of_line = lf @@ -10,302 +13,14 @@ trim_trailing_whitespace = true ij_continuation_indent_size = 8 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 +ij_formatter_tags_enabled = true -[*.java] -ij_smart_tabs = true -ij_java_align_consecutive_assignments = false -ij_java_align_consecutive_variable_declarations = false -ij_java_align_group_field_declarations = false -ij_java_align_multiline_annotation_parameters = false -ij_java_align_multiline_array_initializer_expression = false -ij_java_align_multiline_assignment = false -ij_java_align_multiline_binary_operation = false -ij_java_align_multiline_chained_methods = false -ij_java_align_multiline_extends_list = false -ij_java_align_multiline_for = true -ij_java_align_multiline_method_parentheses = false -ij_java_align_multiline_parameters = true -ij_java_align_multiline_parameters_in_calls = false -ij_java_align_multiline_parenthesized_expression = false -ij_java_align_multiline_records = true -ij_java_align_multiline_resources = true -ij_java_align_multiline_ternary_operation = 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 = off -ij_java_assert_statement_colon_on_next_line = false -ij_java_assert_statement_wrap = off -ij_java_assignment_wrap = off -ij_java_binary_operation_sign_on_next_line = false -ij_java_binary_operation_wrap = off -ij_java_blank_lines_after_anonymous_class_header = 0 -ij_java_blank_lines_after_class_header = 0 -ij_java_blank_lines_after_imports = 1 -ij_java_blank_lines_after_package = 1 -ij_java_blank_lines_around_class = 1 -ij_java_blank_lines_around_field = 0 -ij_java_blank_lines_around_field_in_interface = 0 -ij_java_blank_lines_around_initializer = 1 -ij_java_blank_lines_around_method = 1 -ij_java_blank_lines_around_method_in_interface = 1 -ij_java_blank_lines_before_class_end = 0 -ij_java_blank_lines_before_imports = 1 -ij_java_blank_lines_before_method_body = 0 -ij_java_blank_lines_before_package = 0 -ij_java_block_brace_style = end_of_line -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 = off -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 = 15 -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 = never -ij_java_doc_add_blank_line_after_description = true -ij_java_doc_add_blank_line_after_param_comments = true -ij_java_doc_add_blank_line_after_return = true -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 = true -ij_java_doc_enable_formatting = true -ij_java_doc_enable_leading_asterisks = true -ij_java_doc_indent_on_continuation = true -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 = off -ij_java_field_annotation_wrap = split_into_lines -ij_java_finally_on_new_line = false -ij_java_for_brace_force = never -ij_java_for_statement_new_line_after_left_paren = false -ij_java_for_statement_right_paren_on_new_line = false -ij_java_for_statement_wrap = off -ij_java_generate_final_locals = false -ij_java_generate_final_parameters = false -ij_java_if_brace_force = never -ij_java_imports_layout = *, |, javax.**, java.**, |, $* -ij_java_indent_case_from_switch = true -ij_java_insert_inner_class_imports = false -ij_java_insert_override_annotation = true -ij_java_keep_blank_lines_before_right_brace = 0 -ij_java_keep_blank_lines_between_package_declaration_and_header = 0 -ij_java_keep_blank_lines_in_code = 1 -ij_java_keep_blank_lines_in_declarations = 1 -ij_java_keep_builder_methods_indents = false -ij_java_keep_control_statement_in_one_line = true -ij_java_keep_first_column_comment = true -ij_java_keep_indents_on_empty_lines = false -ij_java_keep_line_breaks = true -ij_java_keep_multiple_expressions_in_one_line = false -ij_java_keep_simple_blocks_in_one_line = false -ij_java_keep_simple_classes_in_one_line = true -ij_java_keep_simple_lambdas_in_one_line = true -ij_java_keep_simple_methods_in_one_line = true -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 = off -ij_java_method_parameters_new_line_after_left_paren = false -ij_java_method_parameters_right_paren_on_new_line = false -ij_java_method_parameters_wrap = off -ij_java_modifier_list_wrap = false -ij_java_names_count_to_use_import_on_demand = 9 -ij_java_new_line_after_lparen_in_record_header = false -ij_java_packages_to_use_import_on_demand = _java.awt.*, _javax.swing.* -ij_java_parameter_annotation_wrap = off -ij_java_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 = true -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 = true -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 = true -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 = true -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 = false -ij_java_ternary_operation_wrap = off -ij_java_test_name_suffix = Test -ij_java_throws_keyword_wrap = off -ij_java_throws_list_wrap = off -ij_java_use_external_annotations = false -ij_java_use_fq_class_names = false -ij_java_use_relative_indents = false -ij_java_use_single_class_imports = true -ij_java_variable_annotation_wrap = off -ij_java_visibility = public -ij_java_while_brace_force = never -ij_java_while_on_new_line = false -ij_java_wrap_comments = false -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, *.pom, *.rng, *.tld, *.wsdl, *.xml, *.xsd, *.xsl, *.xslt, *.xul}] -ij_xml_align_attributes = true -ij_xml_align_text = false -ij_xml_attribute_wrap = normal -ij_xml_block_comment_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 - -[{*.markdown, *.md}] +[{*.yaml,*.yml,*.json,*.graphqlconfig,*.har,*.jsb2,*.jsb3,*.webmanifest,.babelrc,.eslintrc,.prettierrc,.stylelintrc,bowerrc,jest.config}] indent_size = 2 tab_width = 2 -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 -[{*.yaml, *.yml, *.lang}] + +[{*.markdown,*.md,*.html,*.htm,*.ng,*.sht,*.shtm,*.shtml,*.ts,*.ats,*.js,*.cjs,*.bash,*.sh,*.zsh}] indent_size = 2 -ij_yaml_align_values_properties = do_not_align -ij_yaml_autoinsert_sequence_marker = true -ij_yaml_block_mapping_on_new_line = false -ij_yaml_indent_sequence_value = true -ij_yaml_keep_indents_on_empty_lines = false -ij_yaml_keep_line_breaks = true -ij_yaml_sequence_on_new_line = false -ij_yaml_space_before_colon = false -ij_yaml_spaces_within_braces = true -ij_yaml_spaces_within_brackets = true +tab_width = 2 diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index c4daa16..1db504f 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,12 +1,2 @@ -# These are supported funding model platforms - -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: songoda -open_collective: # Replace with a single Open Collective username -ko_fi: # Replace with a single Ko-fi username -tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel -community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry -liberapay: # Replace with a single Liberapay username -issuehunt: # Replace with a single IssueHunt username -otechie: # Replace with a single Otechie username -custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] +custom: [ 'https://craftaro.com/craftaro+' ] diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 2ffd14f..fec9b26 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,18 +1,16 @@ # Please see the documentation for all configuration options: -# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file version: 2 updates: - - package-ecosystem: "maven" - directory: "/" - target-branch: "development" + - package-ecosystem: maven + directory: / + target-branch: development schedule: - interval: "monthly" - ignore: - - dependency-name: "com.songoda:SongodaCore" + interval: monthly - - package-ecosystem: "github-actions" - directory: "/" - target-branch: "development" + - package-ecosystem: github-actions + directory: / + target-branch: development schedule: - interval: "monthly" + interval: monthly diff --git a/.gitignore b/.gitignore index 600a1f2..4089fdb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,17 @@ -/target/ - +## # JetBrains IDEs +## /.idea/ *.iml + +## +# Maven +## +/target/ + +dependency-reduced-pom.xml + +## +# Misc. +## +.DS_Store From 70741c3f7e539e0a7b6921c29a2698094dcd7e70 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Thu, 18 May 2023 11:55:12 +0200 Subject: [PATCH 03/51] GitHub Actions: Switch to new Build + SonarCloud workflows Based on craftaro/GH-Commons These new workflows bring a lot of nice things - For example: * signed jars * Auto-Deploy to Maven Repo * Using songoda.sprax.dev/repo/ as proxy for most repos/dependencies * ... --- .github/workflows/build.yml | 77 +++++++++++++++++++++++++ .github/workflows/maven.yml | 96 -------------------------------- .github/workflows/sonarcloud.yml | 42 ++++++++++++++ pom.xml | 6 +- 4 files changed, 120 insertions(+), 101 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/maven.yml create mode 100644 .github/workflows/sonarcloud.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000..6e4b792 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,77 @@ +name: Build + +on: + push: + branches: [ master, development ] + tags: + - 'v*' + pull_request: + types: [ opened, synchronize, reopened ] + +permissions: read-all + +env: + DEPLOYMENT_POM_PATH: ./dependency-reduced-pom.xml + DEPLOYMENT_ARTIFACT_DIR: ./target + DEPLOYMENT_ARTIFACT_SELECTOR: EpicAnchors-*.jar + +jobs: + Build: + name: Build + Deploy + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + - name: Prepare Workspace + uses: craftaro/GH-Commons/.github/actions/setup_workspace@master + with: + maven_username: ${{ secrets.MAVEN_REPO_USERNAME }} + maven_password: ${{ secrets.MAVEN_REPO_PASSWORD }} + + - name: Set project version + uses: craftaro/GH-Commons/.github/actions/maven_set_project_version@master + with: + append_snapshot: ${{ github.ref_type == 'tag' && 'false' || 'true' }} + version: ${{ github.ref_type == 'tag' && github.ref_name || '' }} + increment_version: ${{ github.ref_type == 'tag' && '' || 'patch' }} + + - name: Build with Maven + run: mvn -B -Duser.name="GitHub Actions on $GITHUB_REPOSITORY (id=$GITHUB_RUN_ID)" -DskipTests clean package + + - name: Sign jar archives + uses: craftaro/GH-Commons/.github/actions/sign_jars@master + with: + jar_file_selector: ${{ env.DEPLOYMENT_ARTIFACT_DIR }}/${{ env.DEPLOYMENT_ARTIFACT_SELECTOR }} + keystore_gpg_encrypted: ${{ secrets.JARSIGNER_KEYSTORE_ENCRYPTED }} + keystore_gpg_password: ${{ secrets.JARSIGNER_KEYSTORE_ENCRYPTED_PASSWORD }} + keystore_password: ${{ secrets.JARSIGNER_KEYSTORE_PASSWORD }} + + - name: Upload Build Artifacts + uses: actions/upload-artifact@v3 + with: + name: ${{ github.event.repository.name }} + path: ${{ env.DEPLOYMENT_ARTIFACT_DIR }}/${{ env.DEPLOYMENT_ARTIFACT_SELECTOR }} + + - name: Deploy to Maven repo + if: ${{ github.event_name == 'push' }} + uses: craftaro/GH-Commons/.github/actions/maven_deploy@master + with: + repository_url: ${{ secrets.MAVEN_REPO_URL_RELEASES }} + repository_url_snapshots: ${{ secrets.MAVEN_REPO_URL_SNAPSHOTS }} + maven_pom_path: ${{ env.DEPLOYMENT_POM_PATH }} + maven_out_dir: ${{ env.DEPLOYMENT_ARTIFACT_DIR }} + + discord_webhook: + name: Send Discord Webhook + runs-on: ubuntu-latest + + needs: [ Build ] + if: ${{ always() && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/development' || github.ref_type == 'tag') }} + + steps: + - uses: actions/checkout@v3 + - name: Notify Webhook + uses: craftaro/GH-Commons/.github/actions/discord_send_job_results@master + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + webhook_url: ${{ secrets.DISCORD_BUILD_STATUS_WEBHOOK }} diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml deleted file mode 100644 index 99f9481..0000000 --- a/.github/workflows/maven.yml +++ /dev/null @@ -1,96 +0,0 @@ -name: 'Build & Test' - -on: - push: - branches: [ master, development ] - pull_request: - types: [ opened, synchronize, reopened ] - -jobs: - build: - name: Build - runs-on: ubuntu-latest - steps: - # Setup Java - - uses: actions/setup-java@v3 - with: - java-version: 16 - distribution: adopt - - # Checkout project files - - uses: actions/checkout@v3 - - # Caches - - name: 'Cache: Maven' - uses: actions/cache@v3 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: ${{ runner.os }}-maven- - - # Build project - - name: Build with Maven - run: 'mvn -B -Duser.name="GitHub Runner on $GITHUB_REPOSITORY (id=$GITHUB_RUN_ID)" clean package' - - # Upload build artifacts - - name: 'Upload Build Artifact: EpicAnchors-*.jar' - uses: actions/upload-artifact@v3 - with: - name: EpicAnchors-artifacts - path: ./target/EpicAnchors-*.jar - - ## - # Discord Webhook - # TODO: Extract into external Action for better re-usability (and readability) [Copied SongodaCore] - ## - - name: 'Discord Webhook (Success)' - if: ${{ success() && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/development') }} - continue-on-error: true - run: | - curl -X POST --data "{\"content\":null,\"embeds\":[{\"title\":\"Build succeeded!\",\"description\":\"The build with the ID #$GITHUB_RUN_NUMBER has succeeded!\",\"url\":\"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID\",\"color\":5490477,\"fields\":[{\"name\":\"Branch\",\"value\":\"$GITHUB_REF\",\"inline\":true}],\"author\":{\"name\":\"$GITHUB_REPOSITORY\",\"url\":\"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY\",\"icon_url\":\"$GITHUB_SERVER_URL/songoda.png\"},\"footer\":{\"text\":\"Initiated by $GITHUB_ACTOR\",\"icon_url\":\"$GITHUB_SERVER_URL/$GITHUB_ACTOR.png\"}}],\"username\":\"OctoAgent\",\"avatar_url\":\"https://github.githubassets.com/images/modules/logos_page/Octocat.png\"}" --header 'Content-Type: application/json' $DISCORD_WEBHOOK - env: - DISCORD_WEBHOOK: ${{ secrets.DISCORD_BUILD_STATUS_WEBHOOK }} - - name: 'Discord Webhook (Failure)' - if: ${{ failure() && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/development') }} - continue-on-error: true - run: | - curl -X POST --data "{\"content\":null,\"embeds\":[{\"title\":\"Build failed!\",\"description\":\"The build with the ID #$GITHUB_RUN_NUMBER has failed!\",\"url\":\"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID\",\"color\":15611419,\"fields\":[{\"name\":\"Branch\",\"value\":\"$GITHUB_REF\",\"inline\":true}],\"author\":{\"name\":\"$GITHUB_REPOSITORY\",\"url\":\"$GITHUB_SERVER_URL/$GITHUB_REPOSITORY\",\"icon_url\":\"$GITHUB_SERVER_URL/songoda.png\"},\"footer\":{\"text\":\"Initiated by $GITHUB_ACTOR\",\"icon_url\":\"$GITHUB_SERVER_URL/$GITHUB_ACTOR.png\"}}],\"username\":\"OctoAgent\",\"avatar_url\":\"https://github.githubassets.com/images/modules/logos_page/Octocat.png\"}" --header "Content-Type:application/json" $DISCORD_WEBHOOK - env: - DISCORD_WEBHOOK: ${{ secrets.DISCORD_BUILD_STATUS_WEBHOOK }} - - - sonarcloud: - name: SonarCloud - runs-on: ubuntu-latest - steps: - # Setup Java - - uses: actions/setup-java@v3 - with: - java-version: 11 - distribution: adopt - - # Checkout project files - - uses: actions/checkout@v3 - with: - fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - # Caches - - name: 'Cache: Maven' - uses: actions/cache@v3 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: ${{ runner.os }}-maven- - - name: 'Cache: SonarCloud' - uses: actions/cache@v3 - with: - path: ~/.sonar/cache - key: ${{ runner.os }}-sonar - restore-keys: ${{ runner.os }}-sonar - - # SonarCloud static analysis - - name: SonarCloud - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml new file mode 100644 index 0000000..e833985 --- /dev/null +++ b/.github/workflows/sonarcloud.yml @@ -0,0 +1,42 @@ +name: SonarCloud + +on: + push: + branches: [ master, development ] + workflow_dispatch: + +permissions: read-all + +env: + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} + SONAR_ORGANIZATION: craftaro + SONAR_PROJECT_KEY: craftaro_EpicAnchors + +jobs: + Analyze: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Prepare Workspace + uses: craftaro/GH-Commons/.github/actions/setup_workspace@master + + - name: 'Cache: SonarCloud' + uses: actions/cache@v3 + with: + path: ~/.sonar/cache + key: ${{ runner.os }}-sonar + + - name: Analyze project + run: > + mvn -B \ + verify \ + org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \ + -Dsonar.host.url=https://sonarcloud.io \ + "-Dsonar.organization=$SONAR_ORGANIZATION" \ + "-Dsonar.projectKey=$SONAR_PROJECT_KEY" + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/pom.xml b/pom.xml index 4e8e806..8faaba3 100644 --- a/pom.xml +++ b/pom.xml @@ -18,8 +18,6 @@ UTF-8 - songoda_EpicAnchors - songoda https://sonarcloud.io ${project.groupId}:${project.artifactId} @@ -64,8 +62,6 @@ ${project.name}-${project.version} - - false true @@ -121,7 +117,7 @@ - spigotmc-repo + SpigotMC https://hub.spigotmc.org/nexus/content/repositories/snapshots/ From cc2307f5320e4cf95bd0e7ff9dcbc155836d91ed Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Thu, 18 May 2023 11:30:04 +0200 Subject: [PATCH 04/51] README.md + pom.xml: Updates some Songoda URLs to Craftaro The image URL (and marketplace URLs that I didn't change) contain the new product ID. The ID changed sadly but I think they will be some work done to restore the old IDs, so I'm not updating them for now. --- README.md | 2 +- pom.xml | 20 ++++---------------- src/main/resources/plugin.yml | 2 +- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index 3cfa95a..f3032b5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@
- + # EpicAnchors **Allow your players to keep chunks loaded for a limited amount of time for a cost.** diff --git a/pom.xml b/pom.xml index 8faaba3..7c1cf17 100644 --- a/pom.xml +++ b/pom.xml @@ -23,13 +23,13 @@ - https://support.songoda.com/servicedesk/customer/portal/3 - Jira Service Desk + https://discord.gg/craftaro + Discord server - https://github.com/songoda/EpicAnchors - scm:git:git://github.com/songoda/EpicAnchors.git + https://github.com/craftaro/EpicAnchors + scm:git:git://github.com/craftaro/EpicAnchors.git @@ -69,11 +69,6 @@ com.songoda.core com.songoda.epicanchors.core - - - epicanchors.nms - com.songoda.epicanchors.nms - @@ -93,13 +88,6 @@ ** - - - com.songoda:epicanchors-v* - - ** - - diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index a5da9fe..d064692 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -9,7 +9,7 @@ softdepend: - HolographicDisplays - Vault -author: Songoda +author: Craftaro authors: [ SpraxDev ] website: ${project.url} From 47fd57a7ac197fdc9180fe3cc940d6e4a9327fa7 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Thu, 18 May 2023 12:07:47 +0200 Subject: [PATCH 05/51] Minor code style changes (mostly use of `this.` for instance fields) --- .../songoda/epicanchors/AnchorManager.java | 26 +++++----- .../com/songoda/epicanchors/EpicAnchors.java | 6 +-- .../epicanchors/commands/sub/GiveCommand.java | 12 ++--- .../commands/sub/ReloadCommand.java | 4 +- .../commands/sub/SettingsCommand.java | 2 +- .../epicanchors/commands/sub/ShowCommand.java | 2 +- .../epicanchors/files/DataManager.java | 2 +- .../files/migration/AnchorMigration.java | 2 +- .../songoda/epicanchors/guis/AnchorGui.java | 12 ++--- .../guis/DestroyConfirmationGui.java | 8 +-- .../epicanchors/listener/AnchorListener.java | 16 +++--- .../epicanchors/listener/BlockListener.java | 12 ++--- .../epicanchors/listener/WorldListener.java | 4 +- .../songoda/epicanchors/tasks/AnchorTask.java | 10 ++-- .../epicanchors/tasks/VisualizeTask.java | 10 ++-- .../epicanchors/utils/ReflectionUtils.java | 52 ------------------- .../songoda/epicanchors/utils/ThreadSync.java | 14 ++--- 17 files changed, 70 insertions(+), 124 deletions(-) delete mode 100644 src/main/java/com/songoda/epicanchors/utils/ReflectionUtils.java diff --git a/src/main/java/com/songoda/epicanchors/AnchorManager.java b/src/main/java/com/songoda/epicanchors/AnchorManager.java index 592f02c..ce878c9 100644 --- a/src/main/java/com/songoda/epicanchors/AnchorManager.java +++ b/src/main/java/com/songoda/epicanchors/AnchorManager.java @@ -58,13 +58,13 @@ public class AnchorManager { } protected void saveAll() { - for (Set anchorSet : anchors.values()) { + for (Set anchorSet : this.anchors.values()) { this.dataManager.updateAnchors(anchorSet, null); } } protected void deInitAll() { - for (World world : anchors.keySet().toArray(new World[0])) { + for (World world : this.anchors.keySet().toArray(new World[0])) { deInitAnchors(world); } } @@ -123,18 +123,18 @@ public class AnchorManager { protected void setReady() { this.ready = true; - Bukkit.getScheduler().runTaskTimer(plugin, this::saveAll, 20L * 60 * 5, 20L * 60 * 5); + Bukkit.getScheduler().runTaskTimer(this.plugin, this::saveAll, 20L * 60 * 5, 20L * 60 * 5); } @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean isReady(World world) { - return this.ready && anchors.containsKey(world); + return this.ready && this.anchors.containsKey(world); } /* Getter */ public Anchor[] getAnchors(@NotNull World world) { - Set set = anchors.get(world); + Set set = this.anchors.get(world); if (set != null) { return set.toArray(new Anchor[0]); @@ -149,7 +149,7 @@ public class AnchorManager { } Location bLoc = b.getLocation(); - Set set = anchors.get(b.getWorld()); + Set set = this.anchors.get(b.getWorld()); if (set != null) { for (Anchor anchor : set) { @@ -171,7 +171,7 @@ public class AnchorManager { throw new IllegalStateException(ERR_WORLD_NOT_READY); } - Set set = anchors.get(chunk.getWorld()); + Set set = this.anchors.get(chunk.getWorld()); if (set != null) { for (Anchor anchor : set) { @@ -237,7 +237,7 @@ public class AnchorManager { Block b = loc.getBlock(); b.setType(Settings.MATERIAL.getMaterial().getMaterial()); - anchors.computeIfAbsent(anchor.getWorld(), k -> new HashSet<>()) + this.anchors.computeIfAbsent(anchor.getWorld(), k -> new HashSet<>()) .add(anchor); updateHologram(anchor); @@ -259,7 +259,7 @@ public class AnchorManager { throw new IllegalStateException(ERR_WORLD_NOT_READY); } - for (Set value : anchors.values()) { + for (Set value : this.anchors.values()) { value.remove(anchor); } @@ -293,9 +293,9 @@ public class AnchorManager { @SuppressWarnings("unused") public void registerAccessCheck(AnchorAccessCheck accessCheck) { - if (!accessChecks.contains(accessCheck)) { + if (!this.accessChecks.contains(accessCheck)) { // Adding at the start of the list makes sure the default check is - accessChecks.add(accessCheck); + this.accessChecks.add(accessCheck); } } @@ -306,7 +306,7 @@ public class AnchorManager { */ @SuppressWarnings("unused") public boolean unregisterAccessCheck(AnchorAccessCheck accessCheck) { - return accessChecks.remove(accessCheck); + return this.accessChecks.remove(accessCheck); } public boolean hasAccess(@NotNull Anchor anchor, @NotNull OfflinePlayer p) { @@ -314,7 +314,7 @@ public class AnchorManager { } /** - * Checks if a player has access to an Anchor. By default only the owner has access to an Anchor. + * Checks if a player has access to an Anchor. By default, only the owner has access to an Anchor. *
* Other plugins can grant access to other players (e.g. friends). *
diff --git a/src/main/java/com/songoda/epicanchors/EpicAnchors.java b/src/main/java/com/songoda/epicanchors/EpicAnchors.java index ed63ade..862d157 100644 --- a/src/main/java/com/songoda/epicanchors/EpicAnchors.java +++ b/src/main/java/com/songoda/epicanchors/EpicAnchors.java @@ -45,15 +45,13 @@ public final class EpicAnchors extends SongodaPlugin { @Override public void onPluginEnable() { - // Songoda Updater SongodaCore.registerPlugin(this, 31, CompatibleMaterial.END_PORTAL_FRAME); // Initialize database this.getLogger().info("Initializing SQLite..."); DatabaseConnector dbCon = new SQLiteConnector(this); this.dataManager = new DataManager(dbCon, this); - AnchorMigration anchorMigration = new AnchorMigration(dbCon, this.dataManager, - new _1_InitialMigration()); + AnchorMigration anchorMigration = new AnchorMigration(dbCon, this.dataManager, new _1_InitialMigration()); anchorMigration.runMigrations(); anchorMigration.migrateLegacyData(this); @@ -74,7 +72,7 @@ public final class EpicAnchors extends SongodaPlugin { // Event Listener this.guiManager = new GuiManager(this); - guiManager.init(); + this.guiManager.init(); PluginManager pluginManager = Bukkit.getPluginManager(); pluginManager.registerEvents(new WorldListener( world -> this.anchorManager.initAnchorsAsync(world, null), diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java b/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java index c90c96c..29f26d6 100644 --- a/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java +++ b/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java @@ -32,7 +32,7 @@ public class GiveCommand extends AbstractCommand { if (target == null && !args[0].trim().equalsIgnoreCase("all") && !args[0].trim().equalsIgnoreCase("@a")) { - plugin.getLocale().newMessage("&cThat is not a player...").sendPrefixedMessage(sender); + this.plugin.getLocale().newMessage("&cThat is not a player...").sendPrefixedMessage(sender); return ReturnType.SYNTAX_ERROR; } @@ -40,22 +40,22 @@ public class GiveCommand extends AbstractCommand { ItemStack itemStack; if (Utils.isInt(args[1]) && Integer.parseInt(args[1]) > 0) { - itemStack = plugin.getAnchorManager().createAnchorItem(Integer.parseInt(args[1]) * 20 * 60 * 60); + itemStack = this.plugin.getAnchorManager().createAnchorItem(Integer.parseInt(args[1]) * 20 * 60 * 60); } else if (args[1].equalsIgnoreCase("infinite")) { - itemStack = plugin.getAnchorManager().createAnchorItem(-1); + itemStack = this.plugin.getAnchorManager().createAnchorItem(-1); } else { - plugin.getLocale().newMessage("&cYou can only use positive whole numbers...").sendPrefixedMessage(sender); + this.plugin.getLocale().newMessage("&cYou can only use positive whole numbers...").sendPrefixedMessage(sender); return ReturnType.FAILURE; } if (target != null) { target.getInventory().addItem(itemStack); - plugin.getLocale().getMessage("command.give.success").sendPrefixedMessage(target); + this.plugin.getLocale().getMessage("command.give.success").sendPrefixedMessage(target); } else { for (Player online : Bukkit.getOnlinePlayers()) { online.getInventory().addItem(itemStack); - plugin.getLocale().getMessage("command.give.success").sendPrefixedMessage(online); + this.plugin.getLocale().getMessage("command.give.success").sendPrefixedMessage(online); } } diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java b/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java index e8a7ccd..1258955 100644 --- a/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java +++ b/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java @@ -17,8 +17,8 @@ public class ReloadCommand extends AbstractCommand { @Override protected ReturnType runCommand(CommandSender sender, String... args) { - plugin.reloadConfig(); - plugin.getLocale().getMessage("&7Configuration and Language files reloaded.").sendPrefixedMessage(sender); + this.plugin.reloadConfig(); + this.plugin.getLocale().getMessage("&7Configuration and Language files reloaded.").sendPrefixedMessage(sender); return ReturnType.SUCCESS; } diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java b/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java index eaa4733..692376b 100644 --- a/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java +++ b/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java @@ -23,7 +23,7 @@ public class SettingsCommand extends AbstractCommand { @Override protected ReturnType runCommand(CommandSender sender, String... args) { - guiManager.showGUI((Player) sender, new PluginConfigGui(instance)); + this.guiManager.showGUI((Player) sender, new PluginConfigGui(this.instance)); return AbstractCommand.ReturnType.SUCCESS; } diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java b/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java index 63bd88a..62a5377 100644 --- a/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java +++ b/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java @@ -30,7 +30,7 @@ public class ShowCommand extends AbstractCommand { boolean visualize = this.plugin.getAnchorManager().toggleChunkVisualized((Player) sender); - plugin.getLocale().getMessage("command.show." + (visualize ? "start" : "stop")) + this.plugin.getLocale().getMessage("command.show." + (visualize ? "start" : "stop")) .sendPrefixedMessage(sender); return ReturnType.SUCCESS; diff --git a/src/main/java/com/songoda/epicanchors/files/DataManager.java b/src/main/java/com/songoda/epicanchors/files/DataManager.java index 21ad7d0..cde7a33 100644 --- a/src/main/java/com/songoda/epicanchors/files/DataManager.java +++ b/src/main/java/com/songoda/epicanchors/files/DataManager.java @@ -159,7 +159,7 @@ public class DataManager extends DataManagerAbstract { for (int i : batchRes) { if (i < 0 && i != Statement.SUCCESS_NO_INFO) { - throw new AssertionError("Batch-INSERT failed for at least one statement with code " + i + ""); + throw new AssertionError("Batch-INSERT failed for at least one statement with code " + i); } } } catch (SQLException ex) { diff --git a/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java b/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java index 891830c..31a65a0 100644 --- a/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java +++ b/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java @@ -67,7 +67,7 @@ public class AnchorMigration extends DataMigrationManager { int z = Location.locToBlock(Double.parseDouble(locArgs[3])); int finalTicksLeft = ticksLeft; - dataManager.exists(worldName, x, y, z, (ex, anchorExists) -> { + this.dataManager.exists(worldName, x, y, z, (ex, anchorExists) -> { if (ex == null) { if (anchorExists) { cfgSection.set(locationStr, null); diff --git a/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java b/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java index 83d4fb9..86ade12 100644 --- a/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java +++ b/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java @@ -36,26 +36,26 @@ public class AnchorGui extends Gui { prepareGui(this.plugin, this, this.anchor); if (Settings.ADD_TIME_WITH_XP.getBoolean()) { - String itemName = plugin.getLocale().getMessage("interface.button.addtimewithxp").getMessage(); - String itemLore = plugin.getLocale().getMessage("interface.button.addtimewithxplore") + String itemName = this.plugin.getLocale().getMessage("interface.button.addtimewithxp").getMessage(); + String itemLore = this.plugin.getLocale().getMessage("interface.button.addtimewithxplore") .processPlaceholder("cost", Settings.XP_COST.getInt()) .getMessage(); setButton(11, GuiUtils.createButtonItem(Settings.XP_ICON.getMaterial(CompatibleMaterial.EXPERIENCE_BOTTLE), itemName, itemLore), - event -> buyTime(anchor, event.player, false)); + event -> buyTime(this.anchor, event.player, false)); } if (EconomyManager.isEnabled() && Settings.ADD_TIME_WITH_ECONOMY.getBoolean()) { - String itemName = plugin.getLocale().getMessage("interface.button.addtimewitheconomy").getMessage(); - String itemLore = plugin.getLocale().getMessage("interface.button.addtimewitheconomylore") + String itemName = this.plugin.getLocale().getMessage("interface.button.addtimewitheconomy").getMessage(); + String itemLore = this.plugin.getLocale().getMessage("interface.button.addtimewitheconomylore") // EconomyManager#formatEconomy adds its own prefix/suffix .processPlaceholder("cost", EconomyManager.formatEconomy(Settings.ECONOMY_COST.getDouble())) .getMessage(); setButton(15, GuiUtils.createButtonItem(Settings.ECO_ICON.getMaterial(CompatibleMaterial.SUNFLOWER), itemName, itemLore), - event -> buyTime(anchor, event.player, true)); + event -> buyTime(this.anchor, event.player, true)); } } diff --git a/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java b/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java index 8eda9ac..69e168f 100644 --- a/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java +++ b/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java @@ -46,18 +46,18 @@ public class DestroyConfirmationGui extends Gui { private void constructGUI() { AnchorGui.prepareGui(this.plugin, this, this.anchor); - String cancelLore = plugin.getLocale().getMessage("interface.button.cancelDestroyLore").getMessage(); - String confirmLore = plugin.getLocale().getMessage("interface.button." + + String cancelLore = this.plugin.getLocale().getMessage("interface.button.cancelDestroyLore").getMessage(); + String confirmLore = this.plugin.getLocale().getMessage("interface.button." + (Settings.ALLOW_ANCHOR_BREAKING.getBoolean() ? "confirmDestroyLore" : "confirmDestroyLoreNoDrops")) .getMessage(); setButton(11, GuiUtils.createButtonItem(CompatibleMaterial.RED_TERRACOTTA, - plugin.getLocale().getMessage("interface.button.cancelDestroy").getMessage(), + this.plugin.getLocale().getMessage("interface.button.cancelDestroy").getMessage(), cancelLore.isEmpty() ? new String[0] : new String[] {cancelLore}), event -> this.handler.accept(null, false)); setButton(15, GuiUtils.createButtonItem(CompatibleMaterial.GREEN_TERRACOTTA, - plugin.getLocale().getMessage("interface.button.confirmDestroy").getMessage(), + this.plugin.getLocale().getMessage("interface.button.confirmDestroy").getMessage(), confirmLore.isEmpty() ? new String[0] : new String[] {confirmLore}), event -> this.handler.accept(null, true)); } diff --git a/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java b/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java index 543fc53..d330af0 100644 --- a/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java +++ b/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java @@ -37,7 +37,7 @@ public class AnchorListener implements Listener { if (item.hasItemMeta() && item.getItemMeta().hasDisplayName() && Settings.MATERIAL.getMaterial().getMaterial() == e.getBlock().getType()) { - if (!plugin.getAnchorManager().isReady(e.getBlock().getWorld())) { + if (!this.plugin.getAnchorManager().isReady(e.getBlock().getWorld())) { e.setCancelled(true); e.getPlayer().sendMessage("Anchors are still being initialized - Please wait a moment"); // TODO } else { @@ -46,7 +46,7 @@ public class AnchorListener implements Listener { if (ticksLeft != 0) { boolean dropOnErr = e.getPlayer().getGameMode() != GameMode.CREATIVE; - plugin.getAnchorManager().createAnchor(e.getBlock().getLocation(), e.getPlayer().getUniqueId(), ticksLeft, + this.plugin.getAnchorManager().createAnchor(e.getBlock().getLocation(), e.getPlayer().getUniqueId(), ticksLeft, (ex, result) -> { if (ex != null) { Utils.logException(this.plugin, ex, "SQLite"); @@ -59,7 +59,7 @@ public class AnchorListener implements Listener { if (dropOnErr) { e.getBlock().getWorld().dropItemNaturally(e.getBlock().getLocation(), - plugin.getAnchorManager().createAnchorItem(ticksLeft, item.getType())); + this.plugin.getAnchorManager().createAnchorItem(ticksLeft, item.getType())); } }); } @@ -72,10 +72,10 @@ public class AnchorListener implements Listener { @EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true) public void onBlockInteract(PlayerInteractEvent e) { if (e.getClickedBlock() == null || - !plugin.getAnchorManager().isReady(e.getClickedBlock().getWorld())) return; + !this.plugin.getAnchorManager().isReady(e.getClickedBlock().getWorld())) return; Player p = e.getPlayer(); - Anchor anchor = plugin.getAnchorManager().getAnchor(e.getClickedBlock()); + Anchor anchor = this.plugin.getAnchorManager().getAnchor(e.getClickedBlock()); if (anchor != null) { e.setCancelled(true); @@ -90,7 +90,7 @@ public class AnchorListener implements Listener { Bukkit.getPluginManager().callEvent(blockBreakEvent); if (!blockBreakEvent.isCancelled()) { - plugin.getAnchorManager().destroyAnchor(anchor); + this.plugin.getAnchorManager().destroyAnchor(anchor); } } })); @@ -115,11 +115,11 @@ public class AnchorListener implements Listener { anchor.getLocation().add(.5, .5, .5), 100, .5, .5, .5); } } else { - plugin.getGuiManager().showGUI(p, new AnchorGui(plugin, anchor)); + this.plugin.getGuiManager().showGUI(p, new AnchorGui(this.plugin, anchor)); } } } else { - plugin.getLocale().getMessage("event.general.nopermission").sendMessage(p); + this.plugin.getLocale().getMessage("event.general.nopermission").sendMessage(p); } } } diff --git a/src/main/java/com/songoda/epicanchors/listener/BlockListener.java b/src/main/java/com/songoda/epicanchors/listener/BlockListener.java index fb0ab77..366bba2 100644 --- a/src/main/java/com/songoda/epicanchors/listener/BlockListener.java +++ b/src/main/java/com/songoda/epicanchors/listener/BlockListener.java @@ -22,7 +22,7 @@ public class BlockListener implements Listener { private void onBlockBurn(BlockBurnEvent e) { if (!this.manager.isReady(e.getBlock().getWorld())) return; - if (manager.isAnchor(e.getBlock())) { + if (this.manager.isAnchor(e.getBlock())) { e.setCancelled(true); } } @@ -31,7 +31,7 @@ public class BlockListener implements Listener { private void onBlockPiston(BlockPistonExtendEvent e) { if (!this.manager.isReady(e.getBlock().getWorld())) return; - if (manager.isAnchor(e.getBlock())) { + if (this.manager.isAnchor(e.getBlock())) { e.setCancelled(true); } } @@ -40,7 +40,7 @@ public class BlockListener implements Listener { private void onBlockPiston(BlockPistonRetractEvent e) { if (!this.manager.isReady(e.getBlock().getWorld())) return; - if (manager.isAnchor(e.getBlock())) { + if (this.manager.isAnchor(e.getBlock())) { e.setCancelled(true); } } @@ -49,7 +49,7 @@ public class BlockListener implements Listener { private void onBlockPhysics(BlockPhysicsEvent e) { if (!this.manager.isReady(e.getBlock().getWorld())) return; - if (manager.isAnchor(e.getBlock())) { + if (this.manager.isAnchor(e.getBlock())) { e.setCancelled(true); } } @@ -58,7 +58,7 @@ public class BlockListener implements Listener { private void onBlockPiston(LeavesDecayEvent e) { if (!this.manager.isReady(e.getBlock().getWorld())) return; - if (manager.isAnchor(e.getBlock())) { + if (this.manager.isAnchor(e.getBlock())) { e.setCancelled(true); } } @@ -68,7 +68,7 @@ public class BlockListener implements Listener { if (!this.manager.isReady(e.getWorld())) return; for (Block b : e.getBlocks()) { - if (manager.isAnchor(b)) { + if (this.manager.isAnchor(b)) { e.setCancelled(true); break; } diff --git a/src/main/java/com/songoda/epicanchors/listener/WorldListener.java b/src/main/java/com/songoda/epicanchors/listener/WorldListener.java index 8e389ab..124856e 100644 --- a/src/main/java/com/songoda/epicanchors/listener/WorldListener.java +++ b/src/main/java/com/songoda/epicanchors/listener/WorldListener.java @@ -20,11 +20,11 @@ public class WorldListener implements Listener { @EventHandler(priority = EventPriority.MONITOR) private void onWorldLoad(WorldLoadEvent e) { - initAnchorsInWorld.accept(e.getWorld()); + this.initAnchorsInWorld.accept(e.getWorld()); } @EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true) private void onWorldUnload(WorldUnloadEvent e) { - deInitAnchorsInWorld.accept(e.getWorld()); + this.deInitAnchorsInWorld.accept(e.getWorld()); } } diff --git a/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java b/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java index c7226f6..8d19451 100644 --- a/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java +++ b/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java @@ -69,7 +69,7 @@ public class AnchorTask extends BukkitRunnable { WorldUtils.loadAnchoredChunk(chunk, this.plugin); } - if (!randomTicksFailed) { + if (!this.randomTicksFailed) { try { NmsManager.getWorld().randomTickChunk(chunk, randomTicks); } catch (ReflectiveOperationException ex) { @@ -77,11 +77,11 @@ public class AnchorTask extends BukkitRunnable { () -> "Failed to do random ticks on this server implementation(/version) - " + "Skipping further random ticks."); - randomTicksFailed = true; + this.randomTicksFailed = true; } } - if (!spawnerTicksFailed) { + if (!this.spawnerTicksFailed) { try { NmsManager.getWorld().tickInactiveSpawners(chunk, TASK_INTERVAL); } catch (ReflectiveOperationException ex) { @@ -89,7 +89,7 @@ public class AnchorTask extends BukkitRunnable { () -> "Failed to do spawner ticks on this server implementation(/version) - " + "Skipping further spawner ticks."); - spawnerTicksFailed = true; + this.spawnerTicksFailed = true; } } } @@ -113,7 +113,7 @@ public class AnchorTask extends BukkitRunnable { } // Update holograms on queued anchors - anchorManager.updateHolograms(toUpdateHolo); + this.anchorManager.updateHolograms(toUpdateHolo); } } catch (Exception ex) { Utils.logException(this.plugin, ex); diff --git a/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java b/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java index b0b1b0b..7c0e5c8 100644 --- a/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java +++ b/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java @@ -30,7 +30,7 @@ public class VisualizeTask extends BukkitRunnable { } public void startTask() { - runTaskTimer(plugin, TASK_INTERVAL, TASK_INTERVAL); + runTaskTimer(this.plugin, TASK_INTERVAL, TASK_INTERVAL); } @Override @@ -55,10 +55,10 @@ public class VisualizeTask extends BukkitRunnable { Location pLoc = p.getLocation(); // start and stop chunk coordinates - int cxi = (pLoc.getBlockX() >> 4) - radius; - int cxn = cxi + radius * 2; - int czi = (pLoc.getBlockZ() >> 4) - radius; - int czn = czi + radius * 2; + int cxi = (pLoc.getBlockX() >> 4) - this.radius; + int cxn = cxi + this.radius * 2; + int czi = (pLoc.getBlockZ() >> 4) - this.radius; + int czn = czi + this.radius * 2; // loop through the chunks to find applicable ones for (int cx = cxi; cx < cxn; ++cx) { diff --git a/src/main/java/com/songoda/epicanchors/utils/ReflectionUtils.java b/src/main/java/com/songoda/epicanchors/utils/ReflectionUtils.java deleted file mode 100644 index 2c3d452..0000000 --- a/src/main/java/com/songoda/epicanchors/utils/ReflectionUtils.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.songoda.epicanchors.utils; - -import java.lang.reflect.Field; - -public class ReflectionUtils { - private ReflectionUtils() { - throw new IllegalStateException("Utility class"); - } - - public static Object getFieldValue(Object instance, String fieldName) throws NoSuchFieldException, IllegalAccessException { - Field f = getField(instance, fieldName); - boolean accessible = f.isAccessible(); - - f.setAccessible(true); - - Object result = f.get(instance); - - f.setAccessible(accessible); - - return result; - } - - public static void setFieldValue(Object instance, String fieldName, Object value) throws NoSuchFieldException, IllegalAccessException { - Field f = getField(instance, fieldName); - boolean accessible = f.isAccessible(); - - f.setAccessible(true); - - f.set(instance, value); - - f.setAccessible(accessible); - } - - private static Field getField(Object instance, String fieldName) throws NoSuchFieldException { - Field f = null; - - Class currClass = instance.getClass(); - do { - try { - f = currClass.getDeclaredField(fieldName); - } catch (NoSuchFieldException ex) { - currClass = currClass.getSuperclass(); - - if (currClass == null) { - throw ex; - } - } - } while (f == null); - - return f; - } -} diff --git a/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java b/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java index cd24b20..7957f0a 100644 --- a/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java +++ b/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java @@ -7,10 +7,10 @@ public class ThreadSync { private final AtomicReference waiting = new AtomicReference<>(true); public void waitForRelease() { - synchronized (syncObj) { - while (waiting.get()) { + synchronized (this.syncObj) { + while (this.waiting.get()) { try { - syncObj.wait(); + this.syncObj.wait(); } catch (Exception ignore) { } } @@ -18,13 +18,13 @@ public class ThreadSync { } public void release() { - synchronized (syncObj) { - waiting.set(false); - syncObj.notifyAll(); + synchronized (this.syncObj) { + this.waiting.set(false); + this.syncObj.notifyAll(); } } public void reset() { - waiting.set(true); + this.waiting.set(true); } } From 5a8f873672c35cfea7ceaebdfe48e5fda32020fe Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Thu, 18 May 2023 12:24:36 +0200 Subject: [PATCH 06/51] Always tick spawners in loaded chunks + Refactor of AnchorTask When a user was inside a given chunk with a spawner, the spawner might not trigger because of the activation range. Anchors are supposed to ignore this limit - This change makes sure, spawners are always active. The hack to not tick chunks with players in them is only in there because of the randomTicks done. But this can still cause chunks to get double the randomTicks they are supposed to because there is no good way (that I know of) to check when the server did them on a given chunk. --- .../songoda/epicanchors/tasks/AnchorTask.java | 128 +++++++++++------- 1 file changed, 79 insertions(+), 49 deletions(-) diff --git a/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java b/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java index 8d19451..bdef2e5 100644 --- a/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java +++ b/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java @@ -45,78 +45,108 @@ public class AnchorTask extends BukkitRunnable { for (World world : Bukkit.getWorlds()) { if (!this.anchorManager.isReady(world)) return; - int randomTicks = WorldUtils.getRandomTickSpeed(world) * TASK_INTERVAL; + int randomTicksToDo = WorldUtils.getRandomTickSpeed(world) * TASK_INTERVAL; Set alreadyTicked = new HashSet<>(); Anchor[] anchorsInWorld = this.anchorManager.getAnchors(world); List toUpdateHolo = new ArrayList<>(anchorsInWorld.length); - // Skip all chunks with players in them - for (Player pInWorld : world.getPlayers()) { - alreadyTicked.add(pInWorld.getLocation().getChunk()); - } - + List chunksWithPlayers = getChunksWithPlayers(world); for (Anchor anchor : anchorsInWorld) { Chunk chunk = anchor.getChunk(); - // Tick the anchor's chunk (but not multiple times) if (alreadyTicked.add(chunk)) { // Having a chunk loaded takes care of entities and weather (https://minecraft.fandom.com/wiki/Tick#Chunk_tick) - if (!chunk.isLoaded()) { - // Loading an already loaded chunk still fires the ChunkLoadEvent and might have a huge - // impact on performance if other plugins do not expect that either... + loadChunk(chunk); - WorldUtils.loadAnchoredChunk(chunk, this.plugin); - } + executeTicksForInactiveSpawners(chunk); - if (!this.randomTicksFailed) { - try { - NmsManager.getWorld().randomTickChunk(chunk, randomTicks); - } catch (ReflectiveOperationException ex) { - this.plugin.getLogger().log(Level.SEVERE, ex, - () -> "Failed to do random ticks on this server implementation(/version) - " + - "Skipping further random ticks."); - - this.randomTicksFailed = true; - } - } - - if (!this.spawnerTicksFailed) { - try { - NmsManager.getWorld().tickInactiveSpawners(chunk, TASK_INTERVAL); - } catch (ReflectiveOperationException ex) { - this.plugin.getLogger().log(Level.SEVERE, ex, - () -> "Failed to do spawner ticks on this server implementation(/version) - " + - "Skipping further spawner ticks."); - - this.spawnerTicksFailed = true; - } + if (!chunksWithPlayers.contains(chunk)) { + executeRandomTick(chunk, randomTicksToDo); } } - // TODO: Only update hologram if a player is nearby - // Simplify player location to chunks to potentially group players - // Use the server view distance to calculate minimum distance to count as not-nearby - - // Destroy anchors and queue hologram update - if (!anchor.isInfinite()) { - int ticksLeft = anchor.removeTicksLeft(3); - - if (ticksLeft == 0) { - this.anchorManager.destroyAnchor(anchor); - } else { - toUpdateHolo.add(anchor); - } - } else { + if (updateAnchorTimeLeftAndCheckIfHologramsNeedsUpdate(anchor)) { toUpdateHolo.add(anchor); } } - // Update holograms on queued anchors this.anchorManager.updateHolograms(toUpdateHolo); } } catch (Exception ex) { Utils.logException(this.plugin, ex); } } + + private List getChunksWithPlayers(World world) { + List playersInWorld = world.getPlayers(); + + List chunksWithPlayers = new ArrayList<>(playersInWorld.size()); + for (Player p : playersInWorld) { + chunksWithPlayers.add(p.getLocation().getChunk()); + } + return chunksWithPlayers; + } + + private void loadChunk(Chunk chunk) { + if (chunk.isLoaded()) { + // Loading an already loaded chunk still fires the ChunkLoadEvent and might have a huge + // impact on performance if other plugins do not expect that either... + return; + } + + WorldUtils.loadAnchoredChunk(chunk, this.plugin); + } + + private void executeTicksForInactiveSpawners(Chunk chunk) { + if (this.spawnerTicksFailed) { + return; + } + + try { + NmsManager.getWorld().tickInactiveSpawners(chunk, TASK_INTERVAL); + } catch (ReflectiveOperationException ex) { + this.plugin.getLogger().log(Level.SEVERE, ex, + () -> "Failed to do spawner ticks on this server implementation(/version) - " + + "Skipping further spawner ticks."); + + this.spawnerTicksFailed = true; + } + } + + private void executeRandomTick(Chunk chunk, int randomTicks) { + if (this.randomTicksFailed) { + return; + } + + try { + NmsManager.getWorld().randomTickChunk(chunk, randomTicks); + } catch (ReflectiveOperationException ex) { + this.plugin.getLogger().log(Level.SEVERE, ex, + () -> "Failed to do random ticks on this server implementation(/version) - " + + "Skipping further random ticks."); + + this.randomTicksFailed = true; + } + } + + private boolean updateAnchorTimeLeftAndCheckIfHologramsNeedsUpdate(Anchor anchor) { + // TODO: Only update hologram if a player is nearby + // Simplify player location to chunks to potentially group players + // Use the server view distance to calculate minimum distance to count as not-nearby + + if (!anchor.isInfinite()) { + int ticksLeft = anchor.removeTicksLeft(TASK_INTERVAL); + + if (ticksLeft == 0) { + this.anchorManager.destroyAnchor(anchor); + } else { + return true; + } + } else { + return true; + } + + return false; + } } From aef95bb83110927d7bdf549ff0586fa863c866af Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Wed, 14 Jun 2023 21:24:50 +0200 Subject: [PATCH 07/51] Migrates from SongodaCore to CraftaroCore v3.0.0-SNAPSHOT --- pom.xml | 18 ++++++++++++----- .../songoda/epicanchors/AnchorManager.java | 16 +++++++-------- .../com/songoda/epicanchors/EpicAnchors.java | 20 +++++++++---------- .../commands/EpicAnchorsCommand.java | 4 ++-- .../epicanchors/commands/sub/GiveCommand.java | 2 +- .../commands/sub/ReloadCommand.java | 2 +- .../commands/sub/SettingsCommand.java | 6 +++--- .../epicanchors/commands/sub/ShowCommand.java | 2 +- .../epicanchors/files/DataManager.java | 4 ++-- .../songoda/epicanchors/files/Settings.java | 10 +++++----- .../files/migration/AnchorMigration.java | 10 +++++----- .../files/migration/_1_InitialMigration.java | 2 +- .../songoda/epicanchors/guis/AnchorGui.java | 16 +++++++-------- .../guis/DestroyConfirmationGui.java | 10 +++++----- .../epicanchors/listener/AnchorListener.java | 6 +++--- .../epicanchors/tasks/VisualizeTask.java | 2 +- 16 files changed, 69 insertions(+), 61 deletions(-) diff --git a/pom.xml b/pom.xml index 7c1cf17..22a9eb5 100644 --- a/pom.xml +++ b/pom.xml @@ -55,18 +55,18 @@ package - shade ${project.name}-${project.version} + true true - com.songoda.core + com.craftaro.core com.songoda.epicanchors.core @@ -88,6 +88,14 @@ ** + + + com.craftaro:CraftaroCore + false + + **/nms/v*/** + + @@ -124,9 +132,9 @@ - com.songoda - SongodaCore - 2.6.20 + com.craftaro + CraftaroCore + 3.0.0-SNAPSHOT compile diff --git a/src/main/java/com/songoda/epicanchors/AnchorManager.java b/src/main/java/com/songoda/epicanchors/AnchorManager.java index ce878c9..ccae59f 100644 --- a/src/main/java/com/songoda/epicanchors/AnchorManager.java +++ b/src/main/java/com/songoda/epicanchors/AnchorManager.java @@ -1,13 +1,13 @@ package com.songoda.epicanchors; -import com.songoda.core.SongodaPlugin; -import com.songoda.core.compatibility.CompatibleMaterial; -import com.songoda.core.compatibility.CompatibleParticleHandler; -import com.songoda.core.compatibility.CompatibleSound; -import com.songoda.core.hooks.HologramManager; -import com.songoda.core.third_party.de.tr7zw.nbtapi.NBTItem; -import com.songoda.core.utils.TextUtils; -import com.songoda.core.utils.TimeUtils; +import com.craftaro.core.SongodaPlugin; +import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.CompatibleParticleHandler; +import com.craftaro.core.compatibility.CompatibleSound; +import com.craftaro.core.hooks.HologramManager; +import com.craftaro.core.third_party.de.tr7zw.nbtapi.NBTItem; +import com.craftaro.core.utils.TextUtils; +import com.craftaro.core.utils.TimeUtils; import com.songoda.epicanchors.api.AnchorAccessCheck; import com.songoda.epicanchors.files.DataManager; import com.songoda.epicanchors.files.Settings; diff --git a/src/main/java/com/songoda/epicanchors/EpicAnchors.java b/src/main/java/com/songoda/epicanchors/EpicAnchors.java index 862d157..533c21c 100644 --- a/src/main/java/com/songoda/epicanchors/EpicAnchors.java +++ b/src/main/java/com/songoda/epicanchors/EpicAnchors.java @@ -1,15 +1,15 @@ package com.songoda.epicanchors; -import com.songoda.core.SongodaCore; -import com.songoda.core.SongodaPlugin; -import com.songoda.core.commands.CommandManager; -import com.songoda.core.compatibility.CompatibleMaterial; -import com.songoda.core.configuration.Config; -import com.songoda.core.database.DatabaseConnector; -import com.songoda.core.database.SQLiteConnector; -import com.songoda.core.gui.GuiManager; -import com.songoda.core.hooks.EconomyManager; -import com.songoda.core.hooks.HologramManager; +import com.craftaro.core.SongodaCore; +import com.craftaro.core.SongodaPlugin; +import com.craftaro.core.commands.CommandManager; +import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.configuration.Config; +import com.craftaro.core.database.DatabaseConnector; +import com.craftaro.core.database.SQLiteConnector; +import com.craftaro.core.gui.GuiManager; +import com.craftaro.core.hooks.EconomyManager; +import com.craftaro.core.hooks.HologramManager; import com.songoda.epicanchors.commands.EpicAnchorsCommand; import com.songoda.epicanchors.commands.sub.GiveCommand; import com.songoda.epicanchors.commands.sub.ReloadCommand; diff --git a/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java b/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java index f8cf8a3..fb31b23 100644 --- a/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java +++ b/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java @@ -1,7 +1,7 @@ package com.songoda.epicanchors.commands; -import com.songoda.core.commands.AbstractCommand; -import com.songoda.core.commands.CommandManager; +import com.craftaro.core.commands.AbstractCommand; +import com.craftaro.core.commands.CommandManager; import com.songoda.epicanchors.EpicAnchors; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java b/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java index 29f26d6..61895d6 100644 --- a/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java +++ b/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java @@ -1,6 +1,6 @@ package com.songoda.epicanchors.commands.sub; -import com.songoda.core.commands.AbstractCommand; +import com.craftaro.core.commands.AbstractCommand; import com.songoda.epicanchors.EpicAnchors; import com.songoda.epicanchors.utils.Utils; import org.bukkit.Bukkit; diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java b/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java index 1258955..6afa57c 100644 --- a/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java +++ b/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java @@ -1,6 +1,6 @@ package com.songoda.epicanchors.commands.sub; -import com.songoda.core.commands.AbstractCommand; +import com.craftaro.core.commands.AbstractCommand; import com.songoda.epicanchors.EpicAnchors; import org.bukkit.command.CommandSender; diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java b/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java index 692376b..c69148c 100644 --- a/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java +++ b/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java @@ -1,8 +1,8 @@ package com.songoda.epicanchors.commands.sub; -import com.songoda.core.commands.AbstractCommand; -import com.songoda.core.configuration.editor.PluginConfigGui; -import com.songoda.core.gui.GuiManager; +import com.craftaro.core.commands.AbstractCommand; +import com.craftaro.core.configuration.editor.PluginConfigGui; +import com.craftaro.core.gui.GuiManager; import com.songoda.epicanchors.EpicAnchors; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java b/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java index 62a5377..02c0fcd 100644 --- a/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java +++ b/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java @@ -1,6 +1,6 @@ package com.songoda.epicanchors.commands.sub; -import com.songoda.core.commands.AbstractCommand; +import com.craftaro.core.commands.AbstractCommand; import com.songoda.epicanchors.EpicAnchors; import net.md_5.bungee.api.ChatColor; import org.bukkit.command.CommandSender; diff --git a/src/main/java/com/songoda/epicanchors/files/DataManager.java b/src/main/java/com/songoda/epicanchors/files/DataManager.java index cde7a33..9cad3ed 100644 --- a/src/main/java/com/songoda/epicanchors/files/DataManager.java +++ b/src/main/java/com/songoda/epicanchors/files/DataManager.java @@ -1,7 +1,7 @@ package com.songoda.epicanchors.files; -import com.songoda.core.database.DataManagerAbstract; -import com.songoda.core.database.DatabaseConnector; +import com.craftaro.core.database.DataManagerAbstract; +import com.craftaro.core.database.DatabaseConnector; import com.songoda.epicanchors.Anchor; import com.songoda.epicanchors.files.migration.AnchorMigration; import com.songoda.epicanchors.utils.Callback; diff --git a/src/main/java/com/songoda/epicanchors/files/Settings.java b/src/main/java/com/songoda/epicanchors/files/Settings.java index 599409f..06a76a8 100644 --- a/src/main/java/com/songoda/epicanchors/files/Settings.java +++ b/src/main/java/com/songoda/epicanchors/files/Settings.java @@ -1,10 +1,10 @@ package com.songoda.epicanchors.files; -import com.songoda.core.compatibility.CompatibleMaterial; -import com.songoda.core.compatibility.CompatibleParticleHandler; -import com.songoda.core.configuration.Config; -import com.songoda.core.configuration.ConfigSetting; -import com.songoda.core.hooks.EconomyManager; +import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.CompatibleParticleHandler; +import com.craftaro.core.configuration.Config; +import com.craftaro.core.configuration.ConfigSetting; +import com.craftaro.core.hooks.EconomyManager; import com.songoda.epicanchors.EpicAnchors; import org.bukkit.plugin.java.JavaPlugin; diff --git a/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java b/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java index 31a65a0..8427be5 100644 --- a/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java +++ b/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java @@ -1,10 +1,10 @@ package com.songoda.epicanchors.files.migration; -import com.songoda.core.configuration.Config; -import com.songoda.core.configuration.ConfigSection; -import com.songoda.core.database.DataMigration; -import com.songoda.core.database.DataMigrationManager; -import com.songoda.core.database.DatabaseConnector; +import com.craftaro.core.configuration.Config; +import com.craftaro.core.configuration.ConfigSection; +import com.craftaro.core.database.DataMigration; +import com.craftaro.core.database.DataMigrationManager; +import com.craftaro.core.database.DatabaseConnector; import com.songoda.epicanchors.files.DataManager; import com.songoda.epicanchors.utils.ThreadSync; import org.bukkit.Location; diff --git a/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java b/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java index 2a6b88b..ebb7bdb 100644 --- a/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java +++ b/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java @@ -1,6 +1,6 @@ package com.songoda.epicanchors.files.migration; -import com.songoda.core.database.DataMigration; +import com.craftaro.core.database.DataMigration; import com.songoda.epicanchors.files.DataManager; import java.sql.Connection; diff --git a/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java b/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java index 86ade12..b277d65 100644 --- a/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java +++ b/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java @@ -1,13 +1,13 @@ package com.songoda.epicanchors.guis; -import com.songoda.core.compatibility.CompatibleMaterial; -import com.songoda.core.compatibility.CompatibleParticleHandler; -import com.songoda.core.compatibility.CompatibleSound; -import com.songoda.core.gui.Gui; -import com.songoda.core.gui.GuiUtils; -import com.songoda.core.hooks.EconomyManager; -import com.songoda.core.utils.TextUtils; -import com.songoda.core.utils.TimeUtils; +import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.compatibility.CompatibleParticleHandler; +import com.craftaro.core.compatibility.CompatibleSound; +import com.craftaro.core.gui.Gui; +import com.craftaro.core.gui.GuiUtils; +import com.craftaro.core.hooks.EconomyManager; +import com.craftaro.core.utils.TextUtils; +import com.craftaro.core.utils.TimeUtils; import com.songoda.epicanchors.Anchor; import com.songoda.epicanchors.EpicAnchors; import com.songoda.epicanchors.files.Settings; diff --git a/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java b/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java index 69e168f..6f9b82a 100644 --- a/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java +++ b/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java @@ -1,10 +1,10 @@ package com.songoda.epicanchors.guis; -import com.songoda.core.compatibility.CompatibleMaterial; -import com.songoda.core.gui.Gui; -import com.songoda.core.gui.GuiUtils; -import com.songoda.core.gui.methods.Closable; -import com.songoda.core.utils.TextUtils; +import com.craftaro.core.compatibility.CompatibleMaterial; +import com.craftaro.core.gui.Gui; +import com.craftaro.core.gui.GuiUtils; +import com.craftaro.core.gui.methods.Closable; +import com.craftaro.core.utils.TextUtils; import com.songoda.epicanchors.Anchor; import com.songoda.epicanchors.EpicAnchors; import com.songoda.epicanchors.files.Settings; diff --git a/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java b/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java index d330af0..63e4f40 100644 --- a/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java +++ b/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java @@ -1,8 +1,8 @@ package com.songoda.epicanchors.listener; -import com.songoda.core.compatibility.CompatibleHand; -import com.songoda.core.compatibility.CompatibleParticleHandler; -import com.songoda.core.compatibility.CompatibleSound; +import com.craftaro.core.compatibility.CompatibleHand; +import com.craftaro.core.compatibility.CompatibleParticleHandler; +import com.craftaro.core.compatibility.CompatibleSound; import com.songoda.epicanchors.Anchor; import com.songoda.epicanchors.AnchorManager; import com.songoda.epicanchors.EpicAnchors; diff --git a/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java b/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java index 7c0e5c8..f55aa7e 100644 --- a/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java +++ b/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java @@ -1,6 +1,6 @@ package com.songoda.epicanchors.tasks; -import com.songoda.core.compatibility.CompatibleParticleHandler; +import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.songoda.epicanchors.Anchor; import com.songoda.epicanchors.EpicAnchors; import com.songoda.epicanchors.files.Settings; From 7f0f2a1acb08632b533d935b5c11e77dd5a486e1 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Wed, 14 Jun 2023 21:25:19 +0200 Subject: [PATCH 08/51] Improves NMS error handling when the server version is not supported --- .../com/songoda/epicanchors/tasks/AnchorTask.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java b/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java index bdef2e5..936d9f1 100644 --- a/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java +++ b/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java @@ -1,6 +1,7 @@ package com.songoda.epicanchors.tasks; -import com.songoda.core.nms.NmsManager; +import com.craftaro.core.nms.Nms; +import com.craftaro.core.nms.UnsupportedServerVersionException; import com.songoda.epicanchors.Anchor; import com.songoda.epicanchors.AnchorManager; import com.songoda.epicanchors.EpicAnchors; @@ -104,8 +105,8 @@ public class AnchorTask extends BukkitRunnable { } try { - NmsManager.getWorld().tickInactiveSpawners(chunk, TASK_INTERVAL); - } catch (ReflectiveOperationException ex) { + Nms.getImplementations().getWorld().tickInactiveSpawners(chunk, TASK_INTERVAL); + } catch (UnsupportedServerVersionException | ReflectiveOperationException | IncompatibleClassChangeError ex) { this.plugin.getLogger().log(Level.SEVERE, ex, () -> "Failed to do spawner ticks on this server implementation(/version) - " + "Skipping further spawner ticks."); @@ -120,8 +121,8 @@ public class AnchorTask extends BukkitRunnable { } try { - NmsManager.getWorld().randomTickChunk(chunk, randomTicks); - } catch (ReflectiveOperationException ex) { + Nms.getImplementations().getWorld().randomTickChunk(chunk, randomTicks); + } catch (UnsupportedServerVersionException | ReflectiveOperationException | IncompatibleClassChangeError ex) { this.plugin.getLogger().log(Level.SEVERE, ex, () -> "Failed to do random ticks on this server implementation(/version) - " + "Skipping further random ticks."); From ae74ffa5f0a896dd99507f652a99205b31dc67ce Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Wed, 14 Jun 2023 21:41:09 +0200 Subject: [PATCH 09/51] Don't try to shade org.jetbrains.annotations and exclude it afterwards --- pom.xml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 22a9eb5..3c3922c 100644 --- a/pom.xml +++ b/pom.xml @@ -82,13 +82,6 @@ - - org.jetbrains:annotations - - ** - - - com.craftaro:CraftaroCore false @@ -143,7 +136,7 @@ org.jetbrains annotations 24.0.1 - compile + provided From b25843aee313ec6f6b2e64d3a788d43c96af56ba Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Wed, 14 Jun 2023 21:41:39 +0200 Subject: [PATCH 10/51] pom.xml: Mark the shaded jar as main artifact --- pom.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pom.xml b/pom.xml index 3c3922c..1ab5233 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,8 @@ ${project.name}-${project.version} + + false true true From da2e999ef94dddffe3b87972db12e12935a99eea Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Wed, 21 Jun 2023 15:05:48 +0200 Subject: [PATCH 11/51] Change the project structure to allow a dedicated API module to exist --- .gitignore | 15 +-- EpicAnchors-API/pom.xml | 60 ++++++++++ EpicAnchors-Plugin/pom.xml | 98 ++++++++++++++++ .../java/com/songoda/epicanchors/Anchor.java | 0 .../songoda/epicanchors/AnchorManager.java | 0 .../com/songoda/epicanchors/EpicAnchors.java | 0 .../epicanchors/api/AnchorAccessCheck.java | 0 .../commands/EpicAnchorsCommand.java | 0 .../epicanchors/commands/sub/GiveCommand.java | 0 .../commands/sub/ReloadCommand.java | 0 .../commands/sub/SettingsCommand.java | 0 .../epicanchors/commands/sub/ShowCommand.java | 0 .../epicanchors/files/DataManager.java | 0 .../songoda/epicanchors/files/Settings.java | 0 .../files/migration/AnchorMigration.java | 0 .../files/migration/_1_InitialMigration.java | 0 .../songoda/epicanchors/guis/AnchorGui.java | 0 .../guis/DestroyConfirmationGui.java | 0 .../epicanchors/listener/AnchorListener.java | 0 .../epicanchors/listener/BlockListener.java | 0 .../epicanchors/listener/DebugListener.java | 0 .../epicanchors/listener/WorldListener.java | 0 .../songoda/epicanchors/tasks/AnchorTask.java | 0 .../epicanchors/tasks/VisualizeTask.java | 0 .../songoda/epicanchors/utils/Callback.java | 0 .../songoda/epicanchors/utils/ThreadSync.java | 0 .../epicanchors/utils/UpdateCallback.java | 0 .../com/songoda/epicanchors/utils/Utils.java | 0 .../songoda/epicanchors/utils/WorldUtils.java | 0 .../src}/main/resources/en_US.lang | 0 .../src}/main/resources/plugin.yml | 6 +- pom.xml | 111 ++---------------- 32 files changed, 178 insertions(+), 112 deletions(-) create mode 100644 EpicAnchors-API/pom.xml create mode 100644 EpicAnchors-Plugin/pom.xml rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/Anchor.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/AnchorManager.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/EpicAnchors.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/files/DataManager.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/files/Settings.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/guis/AnchorGui.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/listener/AnchorListener.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/listener/BlockListener.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/listener/DebugListener.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/listener/WorldListener.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/tasks/AnchorTask.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/utils/Callback.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/utils/ThreadSync.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/utils/UpdateCallback.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/utils/Utils.java (100%) rename {src => EpicAnchors-Plugin/src}/main/java/com/songoda/epicanchors/utils/WorldUtils.java (100%) rename {src => EpicAnchors-Plugin/src}/main/resources/en_US.lang (100%) rename {src => EpicAnchors-Plugin/src}/main/resources/plugin.yml (80%) diff --git a/.gitignore b/.gitignore index 4089fdb..28d2db2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,17 +1,10 @@ -## -# JetBrains IDEs -## +## JetBrains IDEs /.idea/ *.iml -## -# Maven -## -/target/ - +## Maven +/**/target/ dependency-reduced-pom.xml -## -# Misc. -## +## Misc. .DS_Store diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml new file mode 100644 index 0000000..1a3cce0 --- /dev/null +++ b/EpicAnchors-API/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + + + com.craftaro + EpicAnchors-Parent + 2.2.7 + ../pom.xml + + EpicAnchors-API + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.5.0 + + + + site + + jar + + + + + + + https://hub.spigotmc.org/javadocs/spigot/ + + + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 3.4.5 + + + + org.apache.maven.plugins + maven-site-plugin + 3.12.1 + + + + + + + org.spigotmc + spigot-api + 1.8-R0.1-SNAPSHOT + provided + + + diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml new file mode 100644 index 0000000..01de74e --- /dev/null +++ b/EpicAnchors-Plugin/pom.xml @@ -0,0 +1,98 @@ + + + 4.0.0 + + + com.craftaro + EpicAnchors-Parent + 2.2.7 + ../pom.xml + + EpicAnchors-Plugin + + + + + org.apache.maven.plugins + maven-shade-plugin + 3.4.1 + + + + package + + shade + + + + ${project.name}-${project.version} + + false + true + true + + + + com.craftaro.core + com.songoda.epicanchors.core + + + + + + *:* + + + META-INF/** + LICENSE + LICENSE.** + + + + + com.craftaro:CraftaroCore + false + + **/nms/v*/** + + + + + + + + + + + + src/main/resources + true + + + + + + + com.craftaro + EpicAnchors-API + ${project.parent.version} + compile + + + + com.craftaro + CraftaroCore + 3.0.0-SNAPSHOT + compile + + + + org.spigotmc + spigot-api + 1.8-R0.1-SNAPSHOT + provided + + + diff --git a/src/main/java/com/songoda/epicanchors/Anchor.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/Anchor.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/Anchor.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/Anchor.java diff --git a/src/main/java/com/songoda/epicanchors/AnchorManager.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManager.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/AnchorManager.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManager.java diff --git a/src/main/java/com/songoda/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/EpicAnchors.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java diff --git a/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java diff --git a/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java diff --git a/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java diff --git a/src/main/java/com/songoda/epicanchors/files/DataManager.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/DataManager.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/files/DataManager.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/DataManager.java diff --git a/src/main/java/com/songoda/epicanchors/files/Settings.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/Settings.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/files/Settings.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/Settings.java diff --git a/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java diff --git a/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java diff --git a/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/guis/AnchorGui.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java diff --git a/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java diff --git a/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/listener/AnchorListener.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java diff --git a/src/main/java/com/songoda/epicanchors/listener/BlockListener.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/BlockListener.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/listener/BlockListener.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/BlockListener.java diff --git a/src/main/java/com/songoda/epicanchors/listener/DebugListener.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/DebugListener.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/listener/DebugListener.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/DebugListener.java diff --git a/src/main/java/com/songoda/epicanchors/listener/WorldListener.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/WorldListener.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/listener/WorldListener.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/WorldListener.java diff --git a/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java diff --git a/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java diff --git a/src/main/java/com/songoda/epicanchors/utils/Callback.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/Callback.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/utils/Callback.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/Callback.java diff --git a/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/utils/ThreadSync.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java diff --git a/src/main/java/com/songoda/epicanchors/utils/UpdateCallback.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/UpdateCallback.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/utils/UpdateCallback.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/UpdateCallback.java diff --git a/src/main/java/com/songoda/epicanchors/utils/Utils.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/Utils.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/utils/Utils.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/Utils.java diff --git a/src/main/java/com/songoda/epicanchors/utils/WorldUtils.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/WorldUtils.java similarity index 100% rename from src/main/java/com/songoda/epicanchors/utils/WorldUtils.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/WorldUtils.java diff --git a/src/main/resources/en_US.lang b/EpicAnchors-Plugin/src/main/resources/en_US.lang similarity index 100% rename from src/main/resources/en_US.lang rename to EpicAnchors-Plugin/src/main/resources/en_US.lang diff --git a/src/main/resources/plugin.yml b/EpicAnchors-Plugin/src/main/resources/plugin.yml similarity index 80% rename from src/main/resources/plugin.yml rename to EpicAnchors-Plugin/src/main/resources/plugin.yml index d064692..787fbe0 100644 --- a/src/main/resources/plugin.yml +++ b/EpicAnchors-Plugin/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ -name: ${project.name} -description: ${project.description} +name: ${project.parent.name} +description: ${project.parent.description} version: ${project.version} api-version: 1.13 @@ -11,7 +11,7 @@ softdepend: author: Craftaro authors: [ SpraxDev ] -website: ${project.url} +website: ${project.parent.url} commands: EpicAnchors: diff --git a/pom.xml b/pom.xml index 1ab5233..1641736 100644 --- a/pom.xml +++ b/pom.xml @@ -4,17 +4,25 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - com.songoda - EpicAnchors + com.craftaro + EpicAnchors-Parent + pom 2.2.7 + + + + EpicAnchors-API + EpicAnchors-Plugin + EpicAnchors Allow your players to keep chunks loaded for a limited amount of time for a cost. https://songoda.com/marketplace/product/31 - 1.8 - 8 + 8 + 1.8 + 1.8 UTF-8 @@ -32,107 +40,14 @@ scm:git:git://github.com/craftaro/EpicAnchors.git - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.11.0 - - - ${java.version} - ${java.version} - - ${java.release} - - - - - org.apache.maven.plugins - maven-shade-plugin - 3.4.1 - - - - package - - shade - - - - ${project.name}-${project.version} - - false - true - true - - - - com.craftaro.core - com.songoda.epicanchors.core - - - - - - *:* - - - META-INF/** - LICENSE - LICENSE.** - - - - - com.craftaro:CraftaroCore - false - - **/nms/v*/** - - - - - - - - - - - - src/main/resources - true - - - - - SpigotMC + spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ - - - songoda-public - https://repo.songoda.com/repository/public/ - - - org.spigotmc - spigot-api - 1.8-R0.1-SNAPSHOT - provided - - - - com.craftaro - CraftaroCore - 3.0.0-SNAPSHOT - compile - - org.jetbrains From bbfd62c1d3c2debc0369bd0fc2f3a6db93753c04 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 10:51:11 +0200 Subject: [PATCH 12/51] Restructures the code and add classes/interfaces to the API module I tried creating a usable API module containing everything important without introducing too many changes that cost time and might confuse people when migration to the new module. We have limited time right now and need to push the 1.20 update... So no additional thoughts on the API design (so I can regret it in the somewhat near future \o/) --- .../songoda/epicanchors/EpicAnchorsApi.java | 29 ++++ .../com/songoda/epicanchors/api/Anchor.java | 34 ++++ .../epicanchors/api/AnchorAccessCheck.java | 1 - .../epicanchors/api/AnchorManager.java | 88 ++++++++++ .../songoda/epicanchors/utils/Callback.java | 0 .../{Anchor.java => AnchorImpl.java} | 16 +- ...horManager.java => AnchorManagerImpl.java} | 160 +++++++++--------- .../com/songoda/epicanchors/EpicAnchors.java | 6 +- .../commands/EpicAnchorsCommand.java | 2 +- .../epicanchors/commands/sub/GiveCommand.java | 2 +- .../commands/sub/SettingsCommand.java | 2 +- .../epicanchors/files/DataManager.java | 5 +- .../songoda/epicanchors/guis/AnchorGui.java | 4 +- .../guis/DestroyConfirmationGui.java | 2 +- .../epicanchors/listener/AnchorListener.java | 12 +- .../epicanchors/listener/BlockListener.java | 6 +- .../epicanchors/listener/DebugListener.java | 14 +- .../songoda/epicanchors/tasks/AnchorTask.java | 4 +- .../epicanchors/tasks/VisualizeTask.java | 14 +- 19 files changed, 282 insertions(+), 119 deletions(-) create mode 100644 EpicAnchors-API/src/main/java/com/songoda/epicanchors/EpicAnchorsApi.java create mode 100644 EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/Anchor.java rename {EpicAnchors-Plugin => EpicAnchors-API}/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java (84%) create mode 100644 EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorManager.java rename {EpicAnchors-Plugin => EpicAnchors-API}/src/main/java/com/songoda/epicanchors/utils/Callback.java (100%) rename EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/{Anchor.java => AnchorImpl.java} (90%) rename EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/{AnchorManager.java => AnchorManagerImpl.java} (87%) diff --git a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/EpicAnchorsApi.java b/EpicAnchors-API/src/main/java/com/songoda/epicanchors/EpicAnchorsApi.java new file mode 100644 index 0000000..00d1fd4 --- /dev/null +++ b/EpicAnchors-API/src/main/java/com/songoda/epicanchors/EpicAnchorsApi.java @@ -0,0 +1,29 @@ +package com.songoda.epicanchors; + +import com.songoda.epicanchors.api.AnchorManager; + +public final class EpicAnchorsApi { + private static EpicAnchorsApi instance; + + private final AnchorManager anchorManager; + + private EpicAnchorsApi(AnchorManager anchorManager) { + this.anchorManager = anchorManager; + } + + public AnchorManager getAnchorManager() { + return this.anchorManager; + } + + public static EpicAnchorsApi getApi() { + return instance; + } + + static void initApi(AnchorManager anchorManager) { + if (instance != null) { + throw new IllegalStateException("EpicAnchorsApi already initialized"); + } + + instance = new EpicAnchorsApi(anchorManager); + } +} diff --git a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/Anchor.java b/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/Anchor.java new file mode 100644 index 0000000..46fd33c --- /dev/null +++ b/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/Anchor.java @@ -0,0 +1,34 @@ +package com.songoda.epicanchors.api; + +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.World; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public interface Anchor { + int getDbId(); + + UUID getOwner(); + + boolean isLegacy(); + + @NotNull Location getLocation(); + + @NotNull World getWorld(); + + @NotNull Chunk getChunk(); + + int getTicksLeft(); + + @SuppressWarnings("unused") + void setTicksLeft(int ticksLeft); + + @SuppressWarnings("UnusedReturnValue") + int addTicksLeft(int ticks); + + int removeTicksLeft(int ticks); + + boolean isInfinite(); +} diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java b/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java similarity index 84% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java rename to EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java index 66b58f5..b4ad798 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java +++ b/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java @@ -1,6 +1,5 @@ package com.songoda.epicanchors.api; -import com.songoda.epicanchors.Anchor; import org.jetbrains.annotations.NotNull; import java.util.UUID; diff --git a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorManager.java b/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorManager.java new file mode 100644 index 0000000..4a4821d --- /dev/null +++ b/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorManager.java @@ -0,0 +1,88 @@ +package com.songoda.epicanchors.api; + +import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; +import com.songoda.epicanchors.utils.Callback; +import org.bukkit.Chunk; +import org.bukkit.Location; +import org.bukkit.Material; +import org.bukkit.OfflinePlayer; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; +import java.util.UUID; + +public interface AnchorManager { + String NBT_TICKS_KEY = "EpicAnchors_Ticks".toLowerCase(); + + boolean isReady(World world); + + Anchor[] getAnchors(@NotNull World world); + + @Nullable Anchor getAnchor(@NotNull Block block); + + boolean isAnchor(@NotNull Block block); + + boolean hasAnchor(@NotNull Chunk chunk); + + List searchAnchors(Location center, double searchRadius); + + List searchAnchors(Location center, double searchRadius, boolean ignoreHeight); + + /** + * Creates a new anchor at a given location + * + * @param loc The block location for the anchor + * @param ticks The amount of ticks the anchor lives or -1 for infinite + */ + void createAnchor(@NotNull Location loc, @NotNull UUID owner, int ticks, @Nullable Callback callback); + + void destroyAnchor(@NotNull Anchor anchor); + + void destroyAnchor(@NotNull Anchor anchor, boolean forceSkipItemDrop); + + void registerAccessCheck(AnchorAccessCheck accessCheck); + + /** + * @param accessCheck The {@link AnchorAccessCheck} to remove + * @return true if the {@link AnchorAccessCheck} has been found and removed, false otherwise + */ + boolean unregisterAccessCheck(AnchorAccessCheck accessCheck); + + /** + * @deprecated Use {@link #hasAccess(Anchor, UUID)} instead + */ + @Deprecated + boolean hasAccess(@NotNull Anchor anchor, @NotNull OfflinePlayer p); + + /** + * Checks if a player has access to an Anchor. By default, only the owner has access to an Anchor. + *
+ * Other plugins can grant access to other players (e.g. friends). + *
+ * Legacy anchors without an owner automatically grant access to all players. + * + * @return true if the player may access the Anchor, false otherwise + * @see #registerAccessCheck(AnchorAccessCheck) + */ + boolean hasAccess(@NotNull Anchor anchor, @NotNull UUID uuid); + + + ItemStack createAnchorItem(int ticks); + + ItemStack createAnchorItem(int ticks, Material material); + + ItemStack createAnchorItem(int ticks, XMaterial material); + + boolean toggleChunkVisualized(Player p); + + void setChunksVisualized(Player p, boolean visualize); + + boolean hasChunksVisualized(Player p); + + void updateHolograms(List anchors); +} diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/Callback.java b/EpicAnchors-API/src/main/java/com/songoda/epicanchors/utils/Callback.java similarity index 100% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/Callback.java rename to EpicAnchors-API/src/main/java/com/songoda/epicanchors/utils/Callback.java diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/Anchor.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorImpl.java similarity index 90% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/Anchor.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorImpl.java index 2268a61..4011b44 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/Anchor.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorImpl.java @@ -1,5 +1,6 @@ package com.songoda.epicanchors; +import com.songoda.epicanchors.api.Anchor; import com.songoda.epicanchors.utils.WorldUtils; import org.bukkit.Bukkit; import org.bukkit.Chunk; @@ -12,7 +13,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Objects; import java.util.UUID; -public class Anchor { +public class AnchorImpl implements Anchor { private final int dbId; private final UUID owner; @@ -20,7 +21,7 @@ public class Anchor { private final Location location; private int ticksLeft; - public Anchor(int dbId, @Nullable UUID owner, @NotNull Location location, int ticksLeft) { + public AnchorImpl(int dbId, @Nullable UUID owner, @NotNull Location location, int ticksLeft) { if (dbId <= 0) throw new IllegalArgumentException("Invalid value for dbId"); if (ticksLeft <= 0 && ticksLeft != -1) throw new IllegalArgumentException("Invalid value for ticksLeft"); @@ -66,34 +67,42 @@ public class Anchor { } } + @Override public int getDbId() { return this.dbId; } + @Override public UUID getOwner() { return this.owner; } + @Override public boolean isLegacy() { return this.owner == null; } + @Override public @NotNull Location getLocation() { return this.location.clone(); } + @Override public @NotNull World getWorld() { return this.location.getWorld(); } + @Override public @NotNull Chunk getChunk() { return this.location.getChunk(); } + @Override public int getTicksLeft() { return this.ticksLeft; } + @Override @SuppressWarnings("unused") public void setTicksLeft(int ticksLeft) { if (ticksLeft < 0) throw new IllegalArgumentException("Invalid value for ticksLeft"); @@ -101,6 +110,7 @@ public class Anchor { this.ticksLeft = ticksLeft; } + @Override @SuppressWarnings("UnusedReturnValue") public int addTicksLeft(int ticks) { if (!isInfinite()) { @@ -110,6 +120,7 @@ public class Anchor { return this.ticksLeft; } + @Override public int removeTicksLeft(int ticks) { if (!isInfinite()) { this.ticksLeft -= ticks; @@ -122,6 +133,7 @@ public class Anchor { return this.ticksLeft; } + @Override public boolean isInfinite() { return this.ticksLeft == -1; } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManager.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java similarity index 87% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManager.java rename to EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java index ccae59f..6b80c38 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManager.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java @@ -5,10 +5,13 @@ import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.compatibility.CompatibleSound; import com.craftaro.core.hooks.HologramManager; +import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.third_party.de.tr7zw.nbtapi.NBTItem; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; +import com.songoda.epicanchors.api.Anchor; import com.songoda.epicanchors.api.AnchorAccessCheck; +import com.songoda.epicanchors.api.AnchorManager; import com.songoda.epicanchors.files.DataManager; import com.songoda.epicanchors.files.Settings; import com.songoda.epicanchors.utils.Callback; @@ -39,9 +42,8 @@ import java.util.Set; import java.util.UUID; import java.util.concurrent.TimeUnit; -public class AnchorManager { +public class AnchorManagerImpl implements AnchorManager { private static final String ERR_WORLD_NOT_READY = "EpicAnchors has not finished initializing that world yet"; - private static final String NBT_TICKS_KEY = "EpicAnchors_Ticks".toLowerCase(); private final SongodaPlugin plugin; private final DataManager dataManager; @@ -52,7 +54,7 @@ public class AnchorManager { private boolean ready; - public AnchorManager(SongodaPlugin plugin, DataManager dataManager) { + public AnchorManagerImpl(SongodaPlugin plugin, DataManager dataManager) { this.plugin = Objects.requireNonNull(plugin); this.dataManager = Objects.requireNonNull(dataManager); } @@ -82,12 +84,12 @@ public class AnchorManager { this.dataManager.getAnchors(world, (ex, result) -> { if (ex == null) { - this.anchors.computeIfAbsent(world, k -> new HashSet<>()); + this.anchors.computeIfAbsent(world, key -> new HashSet<>()); for (Anchor anchor : result) { - anchor.init(this.plugin); + ((AnchorImpl) anchor).init(this.plugin); - this.anchors.computeIfAbsent(anchor.getWorld(), k -> new HashSet<>()) + this.anchors.computeIfAbsent(anchor.getWorld(), key -> new HashSet<>()) .add(anchor); } @@ -115,7 +117,7 @@ public class AnchorManager { this.dataManager.updateAnchors(tmpAnchors, null); for (Anchor anchor : tmpAnchors) { - anchor.deInit(this.plugin); + ((AnchorImpl) anchor).deInit(this.plugin); } } } @@ -126,13 +128,14 @@ public class AnchorManager { Bukkit.getScheduler().runTaskTimer(this.plugin, this::saveAll, 20L * 60 * 5, 20L * 60 * 5); } - @SuppressWarnings("BooleanMethodIsAlwaysInverted") + @Override public boolean isReady(World world) { return this.ready && this.anchors.containsKey(world); } /* Getter */ + @Override public Anchor[] getAnchors(@NotNull World world) { Set set = this.anchors.get(world); @@ -143,13 +146,14 @@ public class AnchorManager { return new Anchor[0]; } - public @Nullable Anchor getAnchor(@NotNull Block b) { - if (!isReady(b.getWorld())) { + @Override + public @Nullable Anchor getAnchor(@NotNull Block block) { + if (!isReady(block.getWorld())) { throw new IllegalStateException(ERR_WORLD_NOT_READY); } - Location bLoc = b.getLocation(); - Set set = this.anchors.get(b.getWorld()); + Location bLoc = block.getLocation(); + Set set = this.anchors.get(block.getWorld()); if (set != null) { for (Anchor anchor : set) { @@ -162,10 +166,12 @@ public class AnchorManager { return null; } - public boolean isAnchor(@NotNull Block b) { - return getAnchor(b) != null; + @Override + public boolean isAnchor(@NotNull Block block) { + return getAnchor(block) != null; } + @Override public boolean hasAnchor(@NotNull Chunk chunk) { if (!isReady(chunk.getWorld())) { throw new IllegalStateException(ERR_WORLD_NOT_READY); @@ -184,11 +190,13 @@ public class AnchorManager { return false; } + @Override @SuppressWarnings("unused") public List searchAnchors(Location center, double searchRadius) { return searchAnchors(center, searchRadius, false); } + @Override public List searchAnchors(Location center, double searchRadius, boolean ignoreHeight) { List result = new ArrayList<>(); @@ -214,12 +222,7 @@ public class AnchorManager { /* Create 'n Destroy */ - /** - * Creates a new anchor at a given location - * - * @param loc The block location for the anchor - * @param ticks The amount of ticks the anchor lives or -1 for infinite - */ + @Override public void createAnchor(@NotNull Location loc, @NotNull UUID owner, int ticks, @Nullable Callback callback) { if (!isReady(loc.getWorld())) { throw new IllegalStateException(ERR_WORLD_NOT_READY); @@ -234,10 +237,10 @@ public class AnchorManager { } } else { Bukkit.getScheduler().runTask(this.plugin, () -> { - Block b = loc.getBlock(); - b.setType(Settings.MATERIAL.getMaterial().getMaterial()); + Block block = loc.getBlock(); + block.setType(Settings.MATERIAL.getMaterial().parseMaterial()); - this.anchors.computeIfAbsent(anchor.getWorld(), k -> new HashSet<>()) + this.anchors.computeIfAbsent(anchor.getWorld(), key -> new HashSet<>()) .add(anchor); updateHologram(anchor); @@ -250,10 +253,12 @@ public class AnchorManager { }); } + @Override public void destroyAnchor(@NotNull Anchor anchor) { destroyAnchor(anchor, false); } + @Override public void destroyAnchor(@NotNull Anchor anchor, boolean forceSkipItemDrop) { if (!isReady(anchor.getWorld())) { throw new IllegalStateException(ERR_WORLD_NOT_READY); @@ -269,7 +274,7 @@ public class AnchorManager { Block anchorBlock = anchorLoc.getBlock(); Material anchorMaterial = anchorBlock.getType(); - if (anchorBlock.getType() == Settings.MATERIAL.getMaterial().getMaterial()) { + if (anchorBlock.getType() == Settings.MATERIAL.getMaterial().parseMaterial()) { anchorBlock.setType(Material.AIR); } @@ -285,13 +290,13 @@ public class AnchorManager { CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(Settings.PARTICLE_DESTROY.getString()), anchor.getLocation().add(.5, .5, .5), 100, .5, .5, .5); - anchor.deInit(this.plugin); + ((AnchorImpl) anchor).deInit(this.plugin); this.dataManager.deleteAnchorAsync(anchor); } /* Anchor access */ - @SuppressWarnings("unused") + @Override public void registerAccessCheck(AnchorAccessCheck accessCheck) { if (!this.accessChecks.contains(accessCheck)) { // Adding at the start of the list makes sure the default check is @@ -299,31 +304,17 @@ public class AnchorManager { } } - /** - * @param accessCheck The {@link AnchorAccessCheck} to remove - * - * @return true if the {@link AnchorAccessCheck} has been found and removed, false otherwise - */ - @SuppressWarnings("unused") + @Override public boolean unregisterAccessCheck(AnchorAccessCheck accessCheck) { return this.accessChecks.remove(accessCheck); } + @Override public boolean hasAccess(@NotNull Anchor anchor, @NotNull OfflinePlayer p) { return hasAccess(anchor, p.getUniqueId()); } - /** - * Checks if a player has access to an Anchor. By default, only the owner has access to an Anchor. - *
- * Other plugins can grant access to other players (e.g. friends). - *
- * Legacy anchors without an owner automatically grant access to all players. - * - * @return true if the player may access the Anchor, false otherwise - * - * @see #registerAccessCheck(AnchorAccessCheck) - */ + @Override public boolean hasAccess(@NotNull Anchor anchor, @NotNull UUID uuid) { if (anchor.isLegacy() || anchor.getOwner().equals(uuid)) return true; @@ -338,18 +329,21 @@ public class AnchorManager { /* Anchor item */ + @Override public ItemStack createAnchorItem(int ticks) { return createAnchorItem(ticks, Settings.MATERIAL.getMaterial()); } + @Override public ItemStack createAnchorItem(int ticks, Material material) { - return createAnchorItem(ticks, CompatibleMaterial.getMaterial(material)); + return createAnchorItem(ticks, CompatibleMaterial.getMaterial(material).get()); } - public ItemStack createAnchorItem(int ticks, CompatibleMaterial material) { + @Override + public ItemStack createAnchorItem(int ticks, XMaterial material) { if (ticks <= 0 && ticks != -1) throw new IllegalArgumentException(); - ItemStack item = material.getItem(); + ItemStack item = material.parseItem(); ItemMeta meta = item.getItemMeta(); assert meta != null; @@ -363,43 +357,9 @@ public class AnchorManager { return nbtItem.getItem(); } - public static int getTicksFromItem(ItemStack item) { - if (item == null || item.getType() == Material.AIR) { - return 0; - } - - NBTItem nbtItem = new NBTItem(item); - - if (nbtItem.hasTag(NBT_TICKS_KEY)) { - return nbtItem.getInteger(NBT_TICKS_KEY); - } - - // Legacy code (pre v2) to stay cross-version compatible - if (Settings.MATERIAL.getMaterial().getMaterial() == item.getType()) { - if (nbtItem.hasTag("ticks")) { - int result = nbtItem.getInteger("ticks"); - - return result == -99 ? -1 : result; - } - - // Tries to get the ticks remaining from hidden text - if (item.hasItemMeta() && - item.getItemMeta().hasDisplayName() && - item.getItemMeta().getDisplayName().contains(":")) { - try { - int result = Integer.parseInt(item.getItemMeta().getDisplayName().replace("§", "").split(":")[0]); - - return result == -99 ? -1 : result; - } catch (NumberFormatException ignore) { - } - } - } - - return 0; - } - /* Chunk visualization */ + @Override public boolean toggleChunkVisualized(Player p) { boolean visualize = !hasChunksVisualized(p); @@ -408,6 +368,7 @@ public class AnchorManager { return visualize; } + @Override public void setChunksVisualized(Player p, boolean visualize) { if (visualize) { this.visualizedChunk.add(p); @@ -416,6 +377,7 @@ public class AnchorManager { } } + @Override @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean hasChunksVisualized(Player p) { return this.visualizedChunk.contains(p); @@ -423,6 +385,7 @@ public class AnchorManager { /* Holograms */ + @Override public void updateHolograms(List anchors) { // are holograms enabled? if (!Settings.HOLOGRAMS.getBoolean() || !HologramManager.getManager().isEnabled()) return; @@ -473,6 +436,41 @@ public class AnchorManager { return TextUtils.formatText(Settings.NAME_TAG.getString().replace("{REMAINING}", remaining)); } + public static int getTicksFromItem(ItemStack item) { + if (item == null || item.getType() == Material.AIR) { + return 0; + } + + NBTItem nbtItem = new NBTItem(item); + + if (nbtItem.hasTag(NBT_TICKS_KEY)) { + return nbtItem.getInteger(NBT_TICKS_KEY); + } + + // Legacy code (pre v2) to stay cross-version compatible + if (Settings.MATERIAL.getMaterial().parseMaterial() == item.getType()) { + if (nbtItem.hasTag("ticks")) { + int result = nbtItem.getInteger("ticks"); + + return result == -99 ? -1 : result; + } + + // Tries to get the ticks remaining from hidden text + if (item.hasItemMeta() && + item.getItemMeta().hasDisplayName() && + item.getItemMeta().getDisplayName().contains(":")) { + try { + int result = Integer.parseInt(item.getItemMeta().getDisplayName().replace("§", "").split(":")[0]); + + return result == -99 ? -1 : result; + } catch (NumberFormatException ignore) { + } + } + } + + return 0; + } + private static void removeHologram(Anchor anchor) { HologramManager.removeHologram("Anchor#" + anchor.getDbId()); } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java index 533c21c..5516128 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java @@ -10,6 +10,7 @@ import com.craftaro.core.database.SQLiteConnector; import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.hooks.HologramManager; +import com.songoda.epicanchors.api.AnchorManager; import com.songoda.epicanchors.commands.EpicAnchorsCommand; import com.songoda.epicanchors.commands.sub.GiveCommand; import com.songoda.epicanchors.commands.sub.ReloadCommand; @@ -35,7 +36,7 @@ import java.util.logging.Level; public final class EpicAnchors extends SongodaPlugin { private GuiManager guiManager; - private AnchorManager anchorManager; + private AnchorManagerImpl anchorManager; private DataManager dataManager; @@ -55,7 +56,8 @@ public final class EpicAnchors extends SongodaPlugin { anchorMigration.runMigrations(); anchorMigration.migrateLegacyData(this); - this.anchorManager = new AnchorManager(this, this.dataManager); + this.anchorManager = new AnchorManagerImpl(this, this.dataManager); + EpicAnchorsApi.initApi(this.anchorManager); // Economy [1/2] EconomyManager.load(); diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java index fb31b23..ddb973f 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java @@ -38,7 +38,7 @@ public class EpicAnchorsCommand extends AbstractCommand { } @Override - protected List onTab(CommandSender commandSender, String... strings) { + protected List onTab(CommandSender sender, String... args) { return Collections.emptyList(); } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java index 61895d6..58f3ce1 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java @@ -63,7 +63,7 @@ public class GiveCommand extends AbstractCommand { } @Override - protected List onTab(CommandSender commandSender, String... args) { + protected List onTab(CommandSender sender, String... args) { if (args.length == 1) { Set players = new HashSet<>(); diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java index c69148c..b1b5dfd 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java @@ -29,7 +29,7 @@ public class SettingsCommand extends AbstractCommand { } @Override - protected List onTab(CommandSender commandSender, String... strings) { + protected List onTab(CommandSender sender, String... args) { return Collections.emptyList(); } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/DataManager.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/DataManager.java index 9cad3ed..f8675f4 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/DataManager.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/DataManager.java @@ -2,7 +2,8 @@ package com.songoda.epicanchors.files; import com.craftaro.core.database.DataManagerAbstract; import com.craftaro.core.database.DatabaseConnector; -import com.songoda.epicanchors.Anchor; +import com.songoda.epicanchors.api.Anchor; +import com.songoda.epicanchors.AnchorImpl; import com.songoda.epicanchors.files.migration.AnchorMigration; import com.songoda.epicanchors.utils.Callback; import com.songoda.epicanchors.utils.UpdateCallback; @@ -247,7 +248,7 @@ public class DataManager extends DataManagerAbstract { private Anchor extractAnchor(ResultSet rs) throws SQLException { String ownerStr = rs.getString("owner"); - return new Anchor(rs.getInt("id"), + return new AnchorImpl(rs.getInt("id"), ownerStr != null ? UUID.fromString(ownerStr) : null, new Location(Bukkit.getWorld(rs.getString("world_name")), rs.getInt("x"), diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java index b277d65..1b2c3a9 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java @@ -8,8 +8,8 @@ import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; -import com.songoda.epicanchors.Anchor; import com.songoda.epicanchors.EpicAnchors; +import com.songoda.epicanchors.api.Anchor; import com.songoda.epicanchors.files.Settings; import org.bukkit.Bukkit; import org.bukkit.ChatColor; @@ -112,7 +112,7 @@ public class AnchorGui extends Gui { ChatColor.GRAY + TimeUtils.makeReadable((long) ((anchor.getTicksLeft() / 20.0) * 1000)) + " remaining."; gui.setItem(13, GuiUtils.createButtonItem(plugin.getAnchorManager().createAnchorItem( - anchor.getTicksLeft(), anchor.getLocation().getBlock().getType()), + anchor.getTicksLeft(), anchor.getLocation().getBlock().getType()), itemName, itemLore)); } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java index 6f9b82a..507beb5 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java @@ -5,8 +5,8 @@ import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.gui.methods.Closable; import com.craftaro.core.utils.TextUtils; -import com.songoda.epicanchors.Anchor; import com.songoda.epicanchors.EpicAnchors; +import com.songoda.epicanchors.api.Anchor; import com.songoda.epicanchors.files.Settings; import com.songoda.epicanchors.utils.Callback; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java index 63e4f40..7e634ac 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java @@ -3,9 +3,9 @@ package com.songoda.epicanchors.listener; import com.craftaro.core.compatibility.CompatibleHand; import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.compatibility.CompatibleSound; -import com.songoda.epicanchors.Anchor; -import com.songoda.epicanchors.AnchorManager; +import com.songoda.epicanchors.AnchorManagerImpl; import com.songoda.epicanchors.EpicAnchors; +import com.songoda.epicanchors.api.Anchor; import com.songoda.epicanchors.files.Settings; import com.songoda.epicanchors.guis.AnchorGui; import com.songoda.epicanchors.guis.DestroyConfirmationGui; @@ -36,12 +36,12 @@ public class AnchorListener implements Listener { if (item.hasItemMeta() && item.getItemMeta().hasDisplayName() && - Settings.MATERIAL.getMaterial().getMaterial() == e.getBlock().getType()) { + Settings.MATERIAL.getMaterial().parseMaterial() == e.getBlock().getType()) { if (!this.plugin.getAnchorManager().isReady(e.getBlock().getWorld())) { e.setCancelled(true); e.getPlayer().sendMessage("Anchors are still being initialized - Please wait a moment"); // TODO } else { - int ticksLeft = AnchorManager.getTicksFromItem(item); + int ticksLeft = AnchorManagerImpl.getTicksFromItem(item); if (ticksLeft != 0) { boolean dropOnErr = e.getPlayer().getGameMode() != GameMode.CREATIVE; @@ -81,7 +81,7 @@ public class AnchorListener implements Listener { e.setCancelled(true); if (p.hasPermission("EpicAnchors.admin") || - this.plugin.getAnchorManager().hasAccess(anchor, p)) { + this.plugin.getAnchorManager().hasAccess(anchor, p.getUniqueId())) { if (e.getAction() == Action.LEFT_CLICK_BLOCK) { // Destroy anchor this.plugin.getGuiManager().showGUI(e.getPlayer(), new DestroyConfirmationGui(this.plugin, anchor, (ex, result) -> { @@ -96,7 +96,7 @@ public class AnchorListener implements Listener { })); } else if (e.getAction() == Action.RIGHT_CLICK_BLOCK) { // Manage anchor ItemStack item = CompatibleHand.MAIN_HAND.getItem(e.getPlayer()); - int itemTicks = AnchorManager.getTicksFromItem(item); + int itemTicks = AnchorManagerImpl.getTicksFromItem(item); if (itemTicks != 0) { if (!anchor.isInfinite()) { diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/BlockListener.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/BlockListener.java index 366bba2..dad60be 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/BlockListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/BlockListener.java @@ -1,6 +1,6 @@ package com.songoda.epicanchors.listener; -import com.songoda.epicanchors.AnchorManager; +import com.songoda.epicanchors.api.AnchorManager; import org.bukkit.block.Block; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; @@ -67,8 +67,8 @@ public class BlockListener implements Listener { public void onPortalCreation(PortalCreateEvent e) { if (!this.manager.isReady(e.getWorld())) return; - for (Block b : e.getBlocks()) { - if (this.manager.isAnchor(b)) { + for (Block block : e.getBlocks()) { + if (this.manager.isAnchor(block)) { e.setCancelled(true); break; } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/DebugListener.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/DebugListener.java index b1f5b90..661c3bf 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/DebugListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/DebugListener.java @@ -83,22 +83,22 @@ public class DebugListener implements Listener { if (e.isSneaking()) { e.getPlayer().sendMessage("§e§lEntities"); for (Entity entity : chunk.getEntities()) { - count.compute(entity.getType().name(), (k, v) -> v == null ? 1 : v + 1); + count.compute(entity.getType().name(), (key, value) -> value == null ? 1 : value + 1); } } else { e.getPlayer().sendMessage("§e§lTileEntities"); for (BlockState blockState : chunk.getTileEntities()) { - count.compute(blockState.getType().name(), (k, v) -> v == null ? 1 : v + 1); + count.compute(blockState.getType().name(), (key, value) -> value == null ? 1 : value + 1); } } - Map m = count.entrySet().stream() + Map sortedEntitiyCount = count.entrySet() + .stream() .sorted(Map.Entry.comparingByValue().reversed()) - .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, - (e1, e2) -> e1, LinkedHashMap::new)); + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (e1, e2) -> e1, LinkedHashMap::new)); - for (Map.Entry entry : m.entrySet()) { - String entityName = WordUtils.capitalize(entry.getKey().toLowerCase(), new char[] {'_'}).replace("_", ""); + for (Map.Entry entry : sortedEntitiyCount.entrySet()) { + String entityName = WordUtils.capitalize(entry.getKey().toLowerCase(), new char[]{'_'}).replace("_", ""); e.getPlayer().sendMessage("§a" + entityName + "§7:§r " + entry.getValue()); } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java index 936d9f1..89ca7cd 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java @@ -2,9 +2,9 @@ package com.songoda.epicanchors.tasks; import com.craftaro.core.nms.Nms; import com.craftaro.core.nms.UnsupportedServerVersionException; -import com.songoda.epicanchors.Anchor; -import com.songoda.epicanchors.AnchorManager; import com.songoda.epicanchors.EpicAnchors; +import com.songoda.epicanchors.api.Anchor; +import com.songoda.epicanchors.api.AnchorManager; import com.songoda.epicanchors.utils.Utils; import com.songoda.epicanchors.utils.WorldUtils; import org.bukkit.Bukkit; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java index f55aa7e..abd12b1 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java @@ -1,7 +1,7 @@ package com.songoda.epicanchors.tasks; import com.craftaro.core.compatibility.CompatibleParticleHandler; -import com.songoda.epicanchors.Anchor; +import com.songoda.epicanchors.api.Anchor; import com.songoda.epicanchors.EpicAnchors; import com.songoda.epicanchors.files.Settings; import org.bukkit.Bukkit; @@ -66,7 +66,7 @@ public class VisualizeTask extends BukkitRunnable { Chunk chunk = world.getChunkAt(cx, cz); if (loadedChunks.contains(chunk)) { - chunksToVisualize.computeIfAbsent(chunk, k -> new HashSet<>()) + chunksToVisualize.computeIfAbsent(chunk, key -> new HashSet<>()) .add(p); } } @@ -91,17 +91,17 @@ public class VisualizeTask extends BukkitRunnable { startY = maxY - 1; } - Block b = entry.getKey().getBlock(x, startY, z); + Block block = entry.getKey().getBlock(x, startY, z); for (int i = 0; i < 12; ++i) { - if (b.getType().isSolid()) break; + if (block.getType().isSolid()) break; - b = b.getRelative(BlockFace.DOWN); + block = block.getRelative(BlockFace.DOWN); } - if (!b.isEmpty() && !b.getRelative(BlockFace.UP).getType().isOccluding()) { + if (!block.isEmpty() && !block.getRelative(BlockFace.UP).getType().isOccluding()) { CompatibleParticleHandler.spawnParticles(particleType, - b.getLocation().add(.5, 1.5, .5), + block.getLocation().add(.5, 1.5, .5), 0, 0, 0, 0, 1, p); } } From dea440732ec02c8c3dec59f3a4fd6a06abaa9166 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 10:57:14 +0200 Subject: [PATCH 13/51] Make the plugin compatible with the latest Core-Snapshot build I've replaced CompatibleMaterial with a library adding XMaterial. --- EpicAnchors-API/pom.xml | 7 ++ EpicAnchors-Plugin/pom.xml | 2 +- .../com/songoda/epicanchors/EpicAnchors.java | 4 +- .../songoda/epicanchors/files/Settings.java | 67 ++++++++++--------- .../songoda/epicanchors/guis/AnchorGui.java | 6 +- .../guis/DestroyConfirmationGui.java | 12 ++-- .../epicanchors/listener/AnchorListener.java | 2 +- pom.xml | 7 ++ 8 files changed, 61 insertions(+), 46 deletions(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 1a3cce0..9b9cbfb 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -50,6 +50,13 @@
+ + com.craftaro + CraftaroCore + ${craftaro.coreVersion} + provided + + org.spigotmc spigot-api diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 01de74e..4ad34a7 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -84,7 +84,7 @@ com.craftaro CraftaroCore - 3.0.0-SNAPSHOT + ${craftaro.coreVersion} compile diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java index 5516128..00642d8 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java @@ -3,13 +3,13 @@ package com.songoda.epicanchors; import com.craftaro.core.SongodaCore; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.commands.CommandManager; -import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.configuration.Config; import com.craftaro.core.database.DatabaseConnector; import com.craftaro.core.database.SQLiteConnector; import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.hooks.HologramManager; +import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.songoda.epicanchors.api.AnchorManager; import com.songoda.epicanchors.commands.EpicAnchorsCommand; import com.songoda.epicanchors.commands.sub.GiveCommand; @@ -46,7 +46,7 @@ public final class EpicAnchors extends SongodaPlugin { @Override public void onPluginEnable() { - SongodaCore.registerPlugin(this, 31, CompatibleMaterial.END_PORTAL_FRAME); + SongodaCore.registerPlugin(this, 31, XMaterial.END_PORTAL_FRAME); // Initialize database this.getLogger().info("Initializing SQLite..."); diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/Settings.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/Settings.java index 06a76a8..6734fee 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/Settings.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/Settings.java @@ -5,6 +5,7 @@ import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.configuration.Config; import com.craftaro.core.configuration.ConfigSetting; import com.craftaro.core.hooks.EconomyManager; +import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.songoda.epicanchors.EpicAnchors; import org.bukkit.plugin.java.JavaPlugin; @@ -13,60 +14,60 @@ public class Settings { throw new IllegalStateException("Utility class"); } - public static final Config config = JavaPlugin.getPlugin(EpicAnchors.class).getCoreConfig(); + public static final Config CONFIG = JavaPlugin.getPlugin(EpicAnchors.class).getCoreConfig(); - public static final ConfigSetting NAME_TAG = new ConfigSetting(config, "Main.Name Tag", + public static final ConfigSetting NAME_TAG = new ConfigSetting(CONFIG, "Main.Name Tag", "&6Anchor &8(&7{REMAINING}&8)", "The anchor name tag used on the item and in the hologram."); - public static final ConfigSetting LORE = new ConfigSetting(config, "Main.Anchor Lore", + public static final ConfigSetting LORE = new ConfigSetting(CONFIG, "Main.Anchor Lore", "&7Place down to keep that chunk\n&7loaded until the time runs out.", "The lore on the anchor item."); - public static final ConfigSetting MATERIAL = new ConfigSetting(config, "Main.Anchor Block Material", - CompatibleMaterial.END_PORTAL_FRAME.name(), "The material an anchor is represented with?"); + public static final ConfigSetting MATERIAL = new ConfigSetting(CONFIG, "Main.Anchor Block Material", + XMaterial.END_PORTAL_FRAME.name(), "The material an anchor is represented with?"); - public static final ConfigSetting ADD_TIME_WITH_XP = new ConfigSetting(config, "Main.Add Time With XP", true, + public static final ConfigSetting ADD_TIME_WITH_XP = new ConfigSetting(CONFIG, "Main.Add Time With XP", true, "Should players be able to add time to their anchors by using experience?"); - public static final ConfigSetting XP_COST = new ConfigSetting(config, "Main.XP Cost", 10, + public static final ConfigSetting XP_COST = new ConfigSetting(CONFIG, "Main.XP Cost", 10, "The cost in experience levels to add 30 minutes to an anchor."); - public static final ConfigSetting ADD_TIME_WITH_ECONOMY = new ConfigSetting(config, "Main.Add Time With Economy", true, + public static final ConfigSetting ADD_TIME_WITH_ECONOMY = new ConfigSetting(CONFIG, "Main.Add Time With Economy", true, "Should players be able to add time to their anchors by using economy?"); - public static final ConfigSetting ECONOMY_COST = new ConfigSetting(config, "Main.Economy Cost", 5000.0, + public static final ConfigSetting ECONOMY_COST = new ConfigSetting(CONFIG, "Main.Economy Cost", 5000.0, "The cost in economy to add 30 minutes to an anchor."); - public static final ConfigSetting ALLOW_ANCHOR_BREAKING = new ConfigSetting(config, "Main.Allow Anchor Breaking", false, + public static final ConfigSetting ALLOW_ANCHOR_BREAKING = new ConfigSetting(CONFIG, "Main.Allow Anchor Breaking", false, "Should players be able to break anchors and get an item dropped?"); - public static final ConfigSetting HOLOGRAMS = new ConfigSetting(config, "Main.Holograms", true, + public static final ConfigSetting HOLOGRAMS = new ConfigSetting(CONFIG, "Main.Holograms", true, "Toggle holograms showing above anchors."); @SuppressWarnings("unchecked") - public static final ConfigSetting ECONOMY_PLUGIN = new ConfigSetting(config, "Main.Economy", EconomyManager.getEconomy() == null ? "Vault" : EconomyManager.getEconomy().getName(), + public static final ConfigSetting ECONOMY_PLUGIN = new ConfigSetting(CONFIG, "Main.Economy", EconomyManager.getEconomy() == null ? "Vault" : EconomyManager.getEconomy().getName(), "Which economy plugin should be used?", "Supported plugins you have installed: \"" + String.join(", ", EconomyManager.getManager().getRegisteredPlugins()) + "\"."); - public static final ConfigSetting ECO_ICON = new ConfigSetting(config, "Interfaces.Economy Icon", CompatibleMaterial.SUNFLOWER.name(), + public static final ConfigSetting ECO_ICON = new ConfigSetting(CONFIG, "Interfaces.Economy Icon", XMaterial.SUNFLOWER.name(), "Item to be displayed as the icon for economy upgrades."); - public static final ConfigSetting XP_ICON = new ConfigSetting(config, "Interfaces.XP Icon", CompatibleMaterial.EXPERIENCE_BOTTLE.name(), + public static final ConfigSetting XP_ICON = new ConfigSetting(CONFIG, "Interfaces.XP Icon", XMaterial.EXPERIENCE_BOTTLE.name(), "Item to be displayed as the icon for XP upgrades."); - public static final ConfigSetting GLASS_TYPE_1 = new ConfigSetting(config, "Interfaces.Glass Type 1", CompatibleMaterial.GRAY_STAINED_GLASS_PANE.name()); - public static final ConfigSetting GLASS_TYPE_2 = new ConfigSetting(config, "Interfaces.Glass Type 2", CompatibleMaterial.BLUE_STAINED_GLASS_PANE.name()); - public static final ConfigSetting GLASS_TYPE_3 = new ConfigSetting(config, "Interfaces.Glass Type 3", CompatibleMaterial.LIGHT_BLUE_STAINED_GLASS_PANE.name()); + public static final ConfigSetting GLASS_TYPE_1 = new ConfigSetting(CONFIG, "Interfaces.Glass Type 1", XMaterial.GRAY_STAINED_GLASS_PANE.name()); + public static final ConfigSetting GLASS_TYPE_2 = new ConfigSetting(CONFIG, "Interfaces.Glass Type 2", XMaterial.BLUE_STAINED_GLASS_PANE.name()); + public static final ConfigSetting GLASS_TYPE_3 = new ConfigSetting(CONFIG, "Interfaces.Glass Type 3", XMaterial.LIGHT_BLUE_STAINED_GLASS_PANE.name()); - public static final ConfigSetting PARTICLE_DESTROY = new ConfigSetting(config, "Particles.Destroy", + public static final ConfigSetting PARTICLE_DESTROY = new ConfigSetting(CONFIG, "Particles.Destroy", CompatibleParticleHandler.ParticleType.LAVA.name()); - public static final ConfigSetting PARTICLE_UPGRADE = new ConfigSetting(config, "Particles.Upgrade", + public static final ConfigSetting PARTICLE_UPGRADE = new ConfigSetting(CONFIG, "Particles.Upgrade", CompatibleParticleHandler.ParticleType.SPELL_WITCH.name()); - public static final ConfigSetting PARTICLE_VISUALIZER = new ConfigSetting(config, "Particles.Visualizer", + public static final ConfigSetting PARTICLE_VISUALIZER = new ConfigSetting(CONFIG, "Particles.Visualizer", CompatibleParticleHandler.ParticleType.VILLAGER_HAPPY.name()); - public static final ConfigSetting LANGUAGE = new ConfigSetting(config, "System.Language Mode", "en_US", + public static final ConfigSetting LANGUAGE = new ConfigSetting(CONFIG, "System.Language Mode", "en_US", "The enabled language file.", "More language files (if available) can be found in the plugins data folder."); @@ -75,31 +76,31 @@ public class Settings { * called after EconomyManager load */ public static void setupConfig() { - config.load(); - config.setAutoremove(true) + CONFIG.load(); + CONFIG.setAutoremove(true) .setAutosave(true); // convert glass pane settings int color; if ((color = GLASS_TYPE_1.getInt(-1)) != -1) { - config.set(GLASS_TYPE_1.getKey(), CompatibleMaterial.getGlassPaneColor(color).name()); + CONFIG.set(GLASS_TYPE_1.getKey(), CompatibleMaterial.getGlassPaneColor(color).name()); } if ((color = GLASS_TYPE_2.getInt(-1)) != -1) { - config.set(GLASS_TYPE_2.getKey(), CompatibleMaterial.getGlassPaneColor(color).name()); + CONFIG.set(GLASS_TYPE_2.getKey(), CompatibleMaterial.getGlassPaneColor(color).name()); } if ((color = GLASS_TYPE_3.getInt(-1)) != -1) { - config.set(GLASS_TYPE_3.getKey(), CompatibleMaterial.getGlassPaneColor(color).name()); + CONFIG.set(GLASS_TYPE_3.getKey(), CompatibleMaterial.getGlassPaneColor(color).name()); } // convert economy settings - if (config.getBoolean("Economy.Use Vault Economy") && EconomyManager.getManager().isEnabled("Vault")) { - config.set("Main.Economy", "Vault"); - } else if (config.getBoolean("Economy.Use Reserve Economy") && EconomyManager.getManager().isEnabled("Reserve")) { - config.set("Main.Economy", "Reserve"); - } else if (config.getBoolean("Economy.Use Player Points Economy") && EconomyManager.getManager().isEnabled("PlayerPoints")) { - config.set("Main.Economy", "PlayerPoints"); + if (CONFIG.getBoolean("Economy.Use Vault Economy") && EconomyManager.getManager().isEnabled("Vault")) { + CONFIG.set("Main.Economy", "Vault"); + } else if (CONFIG.getBoolean("Economy.Use Reserve Economy") && EconomyManager.getManager().isEnabled("Reserve")) { + CONFIG.set("Main.Economy", "Reserve"); + } else if (CONFIG.getBoolean("Economy.Use Player Points Economy") && EconomyManager.getManager().isEnabled("PlayerPoints")) { + CONFIG.set("Main.Economy", "PlayerPoints"); } - config.saveChanges(); + CONFIG.saveChanges(); } } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java index 1b2c3a9..74d4fc4 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java @@ -1,11 +1,11 @@ package com.songoda.epicanchors.guis; -import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.compatibility.CompatibleSound; import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.hooks.EconomyManager; +import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; import com.songoda.epicanchors.EpicAnchors; @@ -42,7 +42,7 @@ public class AnchorGui extends Gui { .getMessage(); setButton(11, - GuiUtils.createButtonItem(Settings.XP_ICON.getMaterial(CompatibleMaterial.EXPERIENCE_BOTTLE), itemName, itemLore), + GuiUtils.createButtonItem(Settings.XP_ICON.getMaterial(XMaterial.EXPERIENCE_BOTTLE), itemName, itemLore), event -> buyTime(this.anchor, event.player, false)); } @@ -54,7 +54,7 @@ public class AnchorGui extends Gui { .getMessage(); setButton(15, - GuiUtils.createButtonItem(Settings.ECO_ICON.getMaterial(CompatibleMaterial.SUNFLOWER), itemName, itemLore), + GuiUtils.createButtonItem(Settings.ECO_ICON.getMaterial(XMaterial.SUNFLOWER), itemName, itemLore), event -> buyTime(this.anchor, event.player, true)); } } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java index 507beb5..f3cd814 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java @@ -1,9 +1,9 @@ package com.songoda.epicanchors.guis; -import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.gui.methods.Closable; +import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; import com.songoda.epicanchors.EpicAnchors; import com.songoda.epicanchors.api.Anchor; @@ -48,17 +48,17 @@ public class DestroyConfirmationGui extends Gui { String cancelLore = this.plugin.getLocale().getMessage("interface.button.cancelDestroyLore").getMessage(); String confirmLore = this.plugin.getLocale().getMessage("interface.button." + - (Settings.ALLOW_ANCHOR_BREAKING.getBoolean() ? "confirmDestroyLore" : "confirmDestroyLoreNoDrops")) + (Settings.ALLOW_ANCHOR_BREAKING.getBoolean() ? "confirmDestroyLore" : "confirmDestroyLoreNoDrops")) .getMessage(); - setButton(11, GuiUtils.createButtonItem(CompatibleMaterial.RED_TERRACOTTA, + setButton(11, GuiUtils.createButtonItem(XMaterial.RED_TERRACOTTA, this.plugin.getLocale().getMessage("interface.button.cancelDestroy").getMessage(), - cancelLore.isEmpty() ? new String[0] : new String[] {cancelLore}), + cancelLore.isEmpty() ? new String[0] : new String[]{cancelLore}), event -> this.handler.accept(null, false)); - setButton(15, GuiUtils.createButtonItem(CompatibleMaterial.GREEN_TERRACOTTA, + setButton(15, GuiUtils.createButtonItem(XMaterial.GREEN_TERRACOTTA, this.plugin.getLocale().getMessage("interface.button.confirmDestroy").getMessage(), - confirmLore.isEmpty() ? new String[0] : new String[] {confirmLore}), + confirmLore.isEmpty() ? new String[0] : new String[]{confirmLore}), event -> this.handler.accept(null, true)); } } diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java index 7e634ac..d208cca 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java @@ -53,7 +53,7 @@ public class AnchorListener implements Listener { e.getPlayer().sendMessage("Error creating anchor!"); // TODO Bukkit.getScheduler().runTask(this.plugin, () -> { - if (Settings.MATERIAL.getMaterial().getMaterial() == e.getBlock().getType()) { + if (Settings.MATERIAL.getMaterial().parseMaterial() == e.getBlock().getType()) { e.getBlock().setType(Material.AIR); } diff --git a/pom.xml b/pom.xml index 1641736..d046d3c 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,8 @@ https://songoda.com/marketplace/product/31 + 3.0.0-SNAPSHOT + 8 1.8 1.8 @@ -45,6 +47,11 @@ spigot-repo https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + + + craftaro-minecraft-plugins + https://repo.craftaro.com/repository/minecraft-plugins/ + From da0e877d03e0ab427d6132d98baae7d068191c3d Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 10:58:56 +0200 Subject: [PATCH 14/51] Fixes compatibility with DecentHolograms --- .../java/com/songoda/epicanchors/AnchorManagerImpl.java | 9 +++++---- EpicAnchors-Plugin/src/main/resources/plugin.yml | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java index 6b80c38..219387b 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java @@ -44,6 +44,7 @@ import java.util.concurrent.TimeUnit; public class AnchorManagerImpl implements AnchorManager { private static final String ERR_WORLD_NOT_READY = "EpicAnchors has not finished initializing that world yet"; + private static final String HOLOGRAM_PREFIX = "Anchor_"; private final SongodaPlugin plugin; private final DataManager dataManager; @@ -395,12 +396,12 @@ public class AnchorManagerImpl implements AnchorManager { for (Anchor anchor : anchors) { List lines = Collections.singletonList(formatAnchorText(anchor.getTicksLeft(), true)); - if (!HologramManager.isHologramLoaded("Anchor#" + anchor.getDbId())) { - HologramManager.createHologram("Anchor#" + anchor.getDbId(), anchor.getLocation(), lines); + if (!HologramManager.isHologramLoaded(HOLOGRAM_PREFIX + anchor.getDbId())) { + HologramManager.createHologram(HOLOGRAM_PREFIX + anchor.getDbId(), anchor.getLocation(), lines); continue; } - hologramData.put("Anchor#" + anchor.getDbId(), lines); + hologramData.put(HOLOGRAM_PREFIX + anchor.getDbId(), lines); } // Create the holograms @@ -472,6 +473,6 @@ public class AnchorManagerImpl implements AnchorManager { } private static void removeHologram(Anchor anchor) { - HologramManager.removeHologram("Anchor#" + anchor.getDbId()); + HologramManager.removeHologram(HOLOGRAM_PREFIX + anchor.getDbId()); } } diff --git a/EpicAnchors-Plugin/src/main/resources/plugin.yml b/EpicAnchors-Plugin/src/main/resources/plugin.yml index 787fbe0..9fdd47f 100644 --- a/EpicAnchors-Plugin/src/main/resources/plugin.yml +++ b/EpicAnchors-Plugin/src/main/resources/plugin.yml @@ -8,6 +8,7 @@ softdepend: - Holograms - HolographicDisplays - Vault + - DecentHolograms author: Craftaro authors: [ SpraxDev ] From f82486aecbbd464b7ac3728c28010cca42ce961c Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 11:00:53 +0200 Subject: [PATCH 15/51] Sets the plugin's version to v3.0.0-SNAPSHOT --- EpicAnchors-API/pom.xml | 2 +- EpicAnchors-Plugin/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 9b9cbfb..85579f8 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 2.2.7 + 3.0.0-SNAPSHOT ../pom.xml EpicAnchors-API diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 4ad34a7..1c17929 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 2.2.7 + 3.0.0-SNAPSHOT ../pom.xml EpicAnchors-Plugin diff --git a/pom.xml b/pom.xml index d046d3c..b23cb66 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent pom - 2.2.7 + 3.0.0-SNAPSHOT From 8e5cb2405dbe49a9ab264f1b77b47d8f91561548 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 11:05:49 +0200 Subject: [PATCH 16/51] GitHub Actions: Temporarily removes Deployment to the maven repository We have a new template for compiling projects and publishing them but it hasn't really been designed with API modules in mind yet and needs some smaler adjustments before being used in all projects. I don't want to manually update all projects if I change the template workflow file. --- .github/workflows/build.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6e4b792..62db4d3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -52,14 +52,14 @@ jobs: name: ${{ github.event.repository.name }} path: ${{ env.DEPLOYMENT_ARTIFACT_DIR }}/${{ env.DEPLOYMENT_ARTIFACT_SELECTOR }} - - name: Deploy to Maven repo - if: ${{ github.event_name == 'push' }} - uses: craftaro/GH-Commons/.github/actions/maven_deploy@master - with: - repository_url: ${{ secrets.MAVEN_REPO_URL_RELEASES }} - repository_url_snapshots: ${{ secrets.MAVEN_REPO_URL_SNAPSHOTS }} - maven_pom_path: ${{ env.DEPLOYMENT_POM_PATH }} - maven_out_dir: ${{ env.DEPLOYMENT_ARTIFACT_DIR }} +# - name: Deploy to Maven repo +# if: ${{ github.event_name == 'push' }} +# uses: craftaro/GH-Commons/.github/actions/maven_deploy@master +# with: +# repository_url: ${{ secrets.MAVEN_REPO_URL_RELEASES }} +# repository_url_snapshots: ${{ secrets.MAVEN_REPO_URL_SNAPSHOTS }} +# maven_pom_path: ${{ env.DEPLOYMENT_POM_PATH }} +# maven_out_dir: ${{ env.DEPLOYMENT_ARTIFACT_DIR }} discord_webhook: name: Send Discord Webhook From 396720926519a77ee09df0ccc2c0a40420d72520 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 11:20:17 +0200 Subject: [PATCH 17/51] Moved all classes from`com.songoda` package to `com.craftaro` package --- .../epicanchors/EpicAnchorsApi.java | 4 +-- .../epicanchors/api/Anchor.java | 2 +- .../epicanchors/api/AnchorAccessCheck.java | 2 +- .../epicanchors/api/AnchorManager.java | 4 +-- .../epicanchors/utils/Callback.java | 2 +- EpicAnchors-Plugin/pom.xml | 2 +- .../epicanchors/AnchorImpl.java | 6 ++-- .../epicanchors/AnchorManagerImpl.java | 18 +++++----- .../epicanchors/EpicAnchors.java | 34 +++++++++---------- .../commands/EpicAnchorsCommand.java | 4 +-- .../epicanchors/commands/sub/GiveCommand.java | 6 ++-- .../commands/sub/ReloadCommand.java | 4 +-- .../commands/sub/SettingsCommand.java | 4 +-- .../epicanchors/commands/sub/ShowCommand.java | 4 +-- .../epicanchors/files/DataManager.java | 14 ++++---- .../epicanchors/files/Settings.java | 4 +-- .../files/migration/AnchorMigration.java | 6 ++-- .../files/migration/_1_InitialMigration.java | 4 +-- .../epicanchors/guis/AnchorGui.java | 8 ++--- .../guis/DestroyConfirmationGui.java | 10 +++--- .../epicanchors/listener/AnchorListener.java | 16 ++++----- .../epicanchors/listener/BlockListener.java | 4 +-- .../epicanchors/listener/DebugListener.java | 4 +-- .../epicanchors/listener/WorldListener.java | 2 +- .../epicanchors/tasks/AnchorTask.java | 12 +++---- .../epicanchors/tasks/VisualizeTask.java | 8 ++--- .../epicanchors/utils/ThreadSync.java | 2 +- .../epicanchors/utils/UpdateCallback.java | 2 +- .../epicanchors/utils/Utils.java | 2 +- .../epicanchors/utils/WorldUtils.java | 2 +- .../src/main/resources/plugin.yml | 2 +- 31 files changed, 99 insertions(+), 99 deletions(-) rename EpicAnchors-API/src/main/java/com/{songoda => craftaro}/epicanchors/EpicAnchorsApi.java (88%) rename EpicAnchors-API/src/main/java/com/{songoda => craftaro}/epicanchors/api/Anchor.java (93%) rename EpicAnchors-API/src/main/java/com/{songoda => craftaro}/epicanchors/api/AnchorAccessCheck.java (81%) rename EpicAnchors-API/src/main/java/com/{songoda => craftaro}/epicanchors/api/AnchorManager.java (96%) rename EpicAnchors-API/src/main/java/com/{songoda => craftaro}/epicanchors/utils/Callback.java (76%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/AnchorImpl.java (96%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/AnchorManagerImpl.java (97%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/EpicAnchors.java (82%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/commands/EpicAnchorsCommand.java (95%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/commands/sub/GiveCommand.java (96%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/commands/sub/ReloadCommand.java (92%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/commands/sub/SettingsCommand.java (93%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/commands/sub/ShowCommand.java (94%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/files/DataManager.java (96%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/files/Settings.java (98%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/files/migration/AnchorMigration.java (97%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/files/migration/_1_InitialMigration.java (90%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/guis/AnchorGui.java (97%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/guis/DestroyConfirmationGui.java (91%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/listener/AnchorListener.java (93%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/listener/BlockListener.java (96%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/listener/DebugListener.java (98%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/listener/WorldListener.java (95%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/tasks/AnchorTask.java (94%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/tasks/VisualizeTask.java (95%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/utils/ThreadSync.java (94%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/utils/UpdateCallback.java (75%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/utils/Utils.java (97%) rename EpicAnchors-Plugin/src/main/java/com/{songoda => craftaro}/epicanchors/utils/WorldUtils.java (97%) diff --git a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/EpicAnchorsApi.java b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/EpicAnchorsApi.java similarity index 88% rename from EpicAnchors-API/src/main/java/com/songoda/epicanchors/EpicAnchorsApi.java rename to EpicAnchors-API/src/main/java/com/craftaro/epicanchors/EpicAnchorsApi.java index 00d1fd4..42a7e88 100644 --- a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/EpicAnchorsApi.java +++ b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/EpicAnchorsApi.java @@ -1,6 +1,6 @@ -package com.songoda.epicanchors; +package com.craftaro.epicanchors; -import com.songoda.epicanchors.api.AnchorManager; +import com.craftaro.epicanchors.api.AnchorManager; public final class EpicAnchorsApi { private static EpicAnchorsApi instance; diff --git a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/Anchor.java b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java similarity index 93% rename from EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/Anchor.java rename to EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java index 46fd33c..e7345c0 100644 --- a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/Anchor.java +++ b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.api; +package com.craftaro.epicanchors.api; import org.bukkit.Chunk; import org.bukkit.Location; diff --git a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorAccessCheck.java similarity index 81% rename from EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java rename to EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorAccessCheck.java index b4ad798..ddb6221 100644 --- a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorAccessCheck.java +++ b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorAccessCheck.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.api; +package com.craftaro.epicanchors.api; import org.jetbrains.annotations.NotNull; diff --git a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorManager.java b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorManager.java similarity index 96% rename from EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorManager.java rename to EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorManager.java index 4a4821d..265720c 100644 --- a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/api/AnchorManager.java +++ b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorManager.java @@ -1,7 +1,7 @@ -package com.songoda.epicanchors.api; +package com.craftaro.epicanchors.api; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; -import com.songoda.epicanchors.utils.Callback; +import com.craftaro.epicanchors.utils.Callback; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; diff --git a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/utils/Callback.java b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/utils/Callback.java similarity index 76% rename from EpicAnchors-API/src/main/java/com/songoda/epicanchors/utils/Callback.java rename to EpicAnchors-API/src/main/java/com/craftaro/epicanchors/utils/Callback.java index 894e449..cb0f3a3 100644 --- a/EpicAnchors-API/src/main/java/com/songoda/epicanchors/utils/Callback.java +++ b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/utils/Callback.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.utils; +package com.craftaro.epicanchors.utils; import org.jetbrains.annotations.Nullable; diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 1c17929..1bf385c 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -36,7 +36,7 @@ com.craftaro.core - com.songoda.epicanchors.core + com.craftaro.epicanchors.core diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java similarity index 96% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorImpl.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java index 4011b44..c63feef 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java @@ -1,7 +1,7 @@ -package com.songoda.epicanchors; +package com.craftaro.epicanchors; -import com.songoda.epicanchors.api.Anchor; -import com.songoda.epicanchors.utils.WorldUtils; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.utils.WorldUtils; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java similarity index 97% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java index 219387b..4fbdd64 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/AnchorManagerImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors; +package com.craftaro.epicanchors; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.CompatibleMaterial; @@ -9,14 +9,14 @@ import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.third_party.de.tr7zw.nbtapi.NBTItem; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; -import com.songoda.epicanchors.api.Anchor; -import com.songoda.epicanchors.api.AnchorAccessCheck; -import com.songoda.epicanchors.api.AnchorManager; -import com.songoda.epicanchors.files.DataManager; -import com.songoda.epicanchors.files.Settings; -import com.songoda.epicanchors.utils.Callback; -import com.songoda.epicanchors.utils.UpdateCallback; -import com.songoda.epicanchors.utils.Utils; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.api.AnchorAccessCheck; +import com.craftaro.epicanchors.api.AnchorManager; +import com.craftaro.epicanchors.files.DataManager; +import com.craftaro.epicanchors.files.Settings; +import com.craftaro.epicanchors.utils.Callback; +import com.craftaro.epicanchors.utils.UpdateCallback; +import com.craftaro.epicanchors.utils.Utils; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java similarity index 82% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java index 00642d8..154089e 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/EpicAnchors.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors; +package com.craftaro.epicanchors; import com.craftaro.core.SongodaCore; import com.craftaro.core.SongodaPlugin; @@ -10,22 +10,22 @@ import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.hooks.HologramManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; -import com.songoda.epicanchors.api.AnchorManager; -import com.songoda.epicanchors.commands.EpicAnchorsCommand; -import com.songoda.epicanchors.commands.sub.GiveCommand; -import com.songoda.epicanchors.commands.sub.ReloadCommand; -import com.songoda.epicanchors.commands.sub.SettingsCommand; -import com.songoda.epicanchors.commands.sub.ShowCommand; -import com.songoda.epicanchors.files.DataManager; -import com.songoda.epicanchors.files.Settings; -import com.songoda.epicanchors.files.migration.AnchorMigration; -import com.songoda.epicanchors.files.migration._1_InitialMigration; -import com.songoda.epicanchors.listener.AnchorListener; -import com.songoda.epicanchors.listener.BlockListener; -import com.songoda.epicanchors.listener.WorldListener; -import com.songoda.epicanchors.tasks.AnchorTask; -import com.songoda.epicanchors.tasks.VisualizeTask; -import com.songoda.epicanchors.utils.ThreadSync; +import com.craftaro.epicanchors.api.AnchorManager; +import com.craftaro.epicanchors.commands.EpicAnchorsCommand; +import com.craftaro.epicanchors.commands.sub.GiveCommand; +import com.craftaro.epicanchors.commands.sub.ReloadCommand; +import com.craftaro.epicanchors.commands.sub.SettingsCommand; +import com.craftaro.epicanchors.commands.sub.ShowCommand; +import com.craftaro.epicanchors.files.DataManager; +import com.craftaro.epicanchors.files.Settings; +import com.craftaro.epicanchors.files.migration.AnchorMigration; +import com.craftaro.epicanchors.files.migration._1_InitialMigration; +import com.craftaro.epicanchors.listener.AnchorListener; +import com.craftaro.epicanchors.listener.BlockListener; +import com.craftaro.epicanchors.listener.WorldListener; +import com.craftaro.epicanchors.tasks.AnchorTask; +import com.craftaro.epicanchors.tasks.VisualizeTask; +import com.craftaro.epicanchors.utils.ThreadSync; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.plugin.PluginManager; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/EpicAnchorsCommand.java similarity index 95% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/EpicAnchorsCommand.java index ddb973f..f2d4dab 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/EpicAnchorsCommand.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/EpicAnchorsCommand.java @@ -1,8 +1,8 @@ -package com.songoda.epicanchors.commands; +package com.craftaro.epicanchors.commands; import com.craftaro.core.commands.AbstractCommand; import com.craftaro.core.commands.CommandManager; -import com.songoda.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.EpicAnchors; import org.bukkit.ChatColor; import org.bukkit.command.CommandSender; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/GiveCommand.java similarity index 96% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/GiveCommand.java index 58f3ce1..2b1968b 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/GiveCommand.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/GiveCommand.java @@ -1,8 +1,8 @@ -package com.songoda.epicanchors.commands.sub; +package com.craftaro.epicanchors.commands.sub; import com.craftaro.core.commands.AbstractCommand; -import com.songoda.epicanchors.EpicAnchors; -import com.songoda.epicanchors.utils.Utils; +import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.utils.Utils; import org.bukkit.Bukkit; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/ReloadCommand.java similarity index 92% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/ReloadCommand.java index 6afa57c..a00909f 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ReloadCommand.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/ReloadCommand.java @@ -1,7 +1,7 @@ -package com.songoda.epicanchors.commands.sub; +package com.craftaro.epicanchors.commands.sub; import com.craftaro.core.commands.AbstractCommand; -import com.songoda.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.EpicAnchors; import org.bukkit.command.CommandSender; import java.util.Collections; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/SettingsCommand.java similarity index 93% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/SettingsCommand.java index b1b5dfd..d3afba5 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/SettingsCommand.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/SettingsCommand.java @@ -1,9 +1,9 @@ -package com.songoda.epicanchors.commands.sub; +package com.craftaro.epicanchors.commands.sub; import com.craftaro.core.commands.AbstractCommand; import com.craftaro.core.configuration.editor.PluginConfigGui; import com.craftaro.core.gui.GuiManager; -import com.songoda.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.EpicAnchors; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/ShowCommand.java similarity index 94% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/ShowCommand.java index 02c0fcd..227d1f0 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/commands/sub/ShowCommand.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/sub/ShowCommand.java @@ -1,7 +1,7 @@ -package com.songoda.epicanchors.commands.sub; +package com.craftaro.epicanchors.commands.sub; import com.craftaro.core.commands.AbstractCommand; -import com.songoda.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.EpicAnchors; import net.md_5.bungee.api.ChatColor; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/DataManager.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java similarity index 96% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/DataManager.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java index f8675f4..1daf7c0 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/DataManager.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java @@ -1,13 +1,13 @@ -package com.songoda.epicanchors.files; +package com.craftaro.epicanchors.files; import com.craftaro.core.database.DataManagerAbstract; import com.craftaro.core.database.DatabaseConnector; -import com.songoda.epicanchors.api.Anchor; -import com.songoda.epicanchors.AnchorImpl; -import com.songoda.epicanchors.files.migration.AnchorMigration; -import com.songoda.epicanchors.utils.Callback; -import com.songoda.epicanchors.utils.UpdateCallback; -import com.songoda.epicanchors.utils.Utils; +import com.craftaro.epicanchors.AnchorImpl; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.files.migration.AnchorMigration; +import com.craftaro.epicanchors.utils.Callback; +import com.craftaro.epicanchors.utils.UpdateCallback; +import com.craftaro.epicanchors.utils.Utils; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/Settings.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java similarity index 98% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/Settings.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java index 6734fee..466d14c 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/Settings.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.files; +package com.craftaro.epicanchors.files; import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.compatibility.CompatibleParticleHandler; @@ -6,7 +6,7 @@ import com.craftaro.core.configuration.Config; import com.craftaro.core.configuration.ConfigSetting; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; -import com.songoda.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.EpicAnchors; import org.bukkit.plugin.java.JavaPlugin; public class Settings { diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java similarity index 97% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java index 8427be5..ed9483a 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/AnchorMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java @@ -1,12 +1,12 @@ -package com.songoda.epicanchors.files.migration; +package com.craftaro.epicanchors.files.migration; import com.craftaro.core.configuration.Config; import com.craftaro.core.configuration.ConfigSection; import com.craftaro.core.database.DataMigration; import com.craftaro.core.database.DataMigrationManager; import com.craftaro.core.database.DatabaseConnector; -import com.songoda.epicanchors.files.DataManager; -import com.songoda.epicanchors.utils.ThreadSync; +import com.craftaro.epicanchors.files.DataManager; +import com.craftaro.epicanchors.utils.ThreadSync; import org.bukkit.Location; import org.bukkit.plugin.Plugin; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java similarity index 90% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java index ebb7bdb..ac135f1 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/files/migration/_1_InitialMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java @@ -1,7 +1,7 @@ -package com.songoda.epicanchors.files.migration; +package com.craftaro.epicanchors.files.migration; import com.craftaro.core.database.DataMigration; -import com.songoda.epicanchors.files.DataManager; +import com.craftaro.epicanchors.files.DataManager; import java.sql.Connection; import java.sql.SQLException; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java similarity index 97% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java index 74d4fc4..4d79980 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/AnchorGui.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.guis; +package com.craftaro.epicanchors.guis; import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.compatibility.CompatibleSound; @@ -8,9 +8,9 @@ import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; -import com.songoda.epicanchors.EpicAnchors; -import com.songoda.epicanchors.api.Anchor; -import com.songoda.epicanchors.files.Settings; +import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.files.Settings; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/DestroyConfirmationGui.java similarity index 91% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/DestroyConfirmationGui.java index f3cd814..d8e473a 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/guis/DestroyConfirmationGui.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/DestroyConfirmationGui.java @@ -1,14 +1,14 @@ -package com.songoda.epicanchors.guis; +package com.craftaro.epicanchors.guis; import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.gui.methods.Closable; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; -import com.songoda.epicanchors.EpicAnchors; -import com.songoda.epicanchors.api.Anchor; -import com.songoda.epicanchors.files.Settings; -import com.songoda.epicanchors.utils.Callback; +import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.files.Settings; +import com.craftaro.epicanchors.utils.Callback; public class DestroyConfirmationGui extends Gui { private final EpicAnchors plugin; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java similarity index 93% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java index d208cca..e530ce5 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/AnchorListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java @@ -1,15 +1,15 @@ -package com.songoda.epicanchors.listener; +package com.craftaro.epicanchors.listener; import com.craftaro.core.compatibility.CompatibleHand; import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.compatibility.CompatibleSound; -import com.songoda.epicanchors.AnchorManagerImpl; -import com.songoda.epicanchors.EpicAnchors; -import com.songoda.epicanchors.api.Anchor; -import com.songoda.epicanchors.files.Settings; -import com.songoda.epicanchors.guis.AnchorGui; -import com.songoda.epicanchors.guis.DestroyConfirmationGui; -import com.songoda.epicanchors.utils.Utils; +import com.craftaro.epicanchors.AnchorManagerImpl; +import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.files.Settings; +import com.craftaro.epicanchors.guis.AnchorGui; +import com.craftaro.epicanchors.guis.DestroyConfirmationGui; +import com.craftaro.epicanchors.utils.Utils; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/BlockListener.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/BlockListener.java similarity index 96% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/BlockListener.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/BlockListener.java index dad60be..0b34ea3 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/BlockListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/BlockListener.java @@ -1,6 +1,6 @@ -package com.songoda.epicanchors.listener; +package com.craftaro.epicanchors.listener; -import com.songoda.epicanchors.api.AnchorManager; +import com.craftaro.epicanchors.api.AnchorManager; import org.bukkit.block.Block; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/DebugListener.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/DebugListener.java similarity index 98% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/DebugListener.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/DebugListener.java index 661c3bf..c5973a2 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/DebugListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/DebugListener.java @@ -1,6 +1,6 @@ -package com.songoda.epicanchors.listener; +package com.craftaro.epicanchors.listener; -import com.songoda.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.EpicAnchors; import org.apache.commons.lang.WordUtils; import org.bukkit.Chunk; import org.bukkit.Location; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/WorldListener.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/WorldListener.java similarity index 95% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/WorldListener.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/WorldListener.java index 124856e..7dc1e0b 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/listener/WorldListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/WorldListener.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.listener; +package com.craftaro.epicanchors.listener; import org.bukkit.World; import org.bukkit.event.EventHandler; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/tasks/AnchorTask.java similarity index 94% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/tasks/AnchorTask.java index 89ca7cd..ab3f794 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/AnchorTask.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/tasks/AnchorTask.java @@ -1,12 +1,12 @@ -package com.songoda.epicanchors.tasks; +package com.craftaro.epicanchors.tasks; import com.craftaro.core.nms.Nms; import com.craftaro.core.nms.UnsupportedServerVersionException; -import com.songoda.epicanchors.EpicAnchors; -import com.songoda.epicanchors.api.Anchor; -import com.songoda.epicanchors.api.AnchorManager; -import com.songoda.epicanchors.utils.Utils; -import com.songoda.epicanchors.utils.WorldUtils; +import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.api.AnchorManager; +import com.craftaro.epicanchors.utils.Utils; +import com.craftaro.epicanchors.utils.WorldUtils; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/tasks/VisualizeTask.java similarity index 95% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/tasks/VisualizeTask.java index abd12b1..fa085b4 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/tasks/VisualizeTask.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/tasks/VisualizeTask.java @@ -1,9 +1,9 @@ -package com.songoda.epicanchors.tasks; +package com.craftaro.epicanchors.tasks; import com.craftaro.core.compatibility.CompatibleParticleHandler; -import com.songoda.epicanchors.api.Anchor; -import com.songoda.epicanchors.EpicAnchors; -import com.songoda.epicanchors.files.Settings; +import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.files.Settings; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/ThreadSync.java similarity index 94% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/ThreadSync.java index 7957f0a..8f5c73a 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/ThreadSync.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/ThreadSync.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.utils; +package com.craftaro.epicanchors.utils; import java.util.concurrent.atomic.AtomicReference; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/UpdateCallback.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/UpdateCallback.java similarity index 75% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/UpdateCallback.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/UpdateCallback.java index bd1a609..5a628dd 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/UpdateCallback.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/UpdateCallback.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.utils; +package com.craftaro.epicanchors.utils; import org.jetbrains.annotations.Nullable; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/Utils.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/Utils.java similarity index 97% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/Utils.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/Utils.java index 6549354..99988a4 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/Utils.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/Utils.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.utils; +package com.craftaro.epicanchors.utils; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; diff --git a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/WorldUtils.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/WorldUtils.java similarity index 97% rename from EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/WorldUtils.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/WorldUtils.java index 810ab31..6f7a537 100644 --- a/EpicAnchors-Plugin/src/main/java/com/songoda/epicanchors/utils/WorldUtils.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/WorldUtils.java @@ -1,4 +1,4 @@ -package com.songoda.epicanchors.utils; +package com.craftaro.epicanchors.utils; import org.bukkit.Chunk; import org.bukkit.World; diff --git a/EpicAnchors-Plugin/src/main/resources/plugin.yml b/EpicAnchors-Plugin/src/main/resources/plugin.yml index 9fdd47f..b4d7bcb 100644 --- a/EpicAnchors-Plugin/src/main/resources/plugin.yml +++ b/EpicAnchors-Plugin/src/main/resources/plugin.yml @@ -3,7 +3,7 @@ description: ${project.parent.description} version: ${project.version} api-version: 1.13 -main: com.songoda.epicanchors.EpicAnchors +main: com.craftaro.epicanchors.EpicAnchors softdepend: - Holograms - HolographicDisplays From a2ed4c8656ceb368150637176311593364fb1e3e Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 11:28:44 +0200 Subject: [PATCH 18/51] Fix final plugin jar's name being suffixed with '-Plugin' The suffix comes from the module itself but this is the main artifact of the project. --- EpicAnchors-Plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 1bf385c..62e7337 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -27,7 +27,7 @@ - ${project.name}-${project.version} + ${project.parent.name}-${project.version} false true From a1e5c11ccbe906cd06b259b28440046e0a0b7888 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 11:30:34 +0200 Subject: [PATCH 19/51] Updates .github/FUNDING.yml to only list Craftaro+ --- .github/FUNDING.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 1db504f..1ef9dcf 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,2 +1 @@ -patreon: songoda -custom: [ 'https://craftaro.com/craftaro+' ] +custom: [ 'https://craftaro.to/+' ] From adcff80c47597134c060e02b940e1d0a111cacf1 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 11:46:54 +0200 Subject: [PATCH 20/51] pom.xml/plugin.yml: Updates Marketplace Link from Songoda to Craftaro --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b23cb66..b2d40e2 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ EpicAnchors Allow your players to keep chunks loaded for a limited amount of time for a cost. - https://songoda.com/marketplace/product/31 + https://craftaro.com/marketplace/product/31 3.0.0-SNAPSHOT From 5622e86e0f8d975a5a09ec0f858ad976b57841f3 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 11:47:23 +0200 Subject: [PATCH 21/51] Changes Songoda to Craftaro in EpicAnchors command --- .../com/craftaro/epicanchors/commands/EpicAnchorsCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/EpicAnchorsCommand.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/EpicAnchorsCommand.java index f2d4dab..049ba9c 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/EpicAnchorsCommand.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/commands/EpicAnchorsCommand.java @@ -24,7 +24,7 @@ public class EpicAnchorsCommand extends AbstractCommand { protected ReturnType runCommand(CommandSender sender, String... args) { sender.sendMessage(""); this.plugin.getLocale().newMessage("&7Version " + this.plugin.getDescription().getVersion() - + " Created with <3 by &5&l&oSongoda").sendPrefixedMessage(sender); + + " Created with <3 by &5&l&oCraftaro").sendPrefixedMessage(sender); for (AbstractCommand cmd : this.commandManager.getAllCommands()) { if (cmd.getPermissionNode() == null || sender.hasPermission(cmd.getPermissionNode())) { From 5e23c339f9da762d6c2fd74510c1aa1fa566050d Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 12:32:49 +0200 Subject: [PATCH 22/51] Configure generation of JavaDocs and Source jars for API submodule --- EpicAnchors-API/pom.xml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 85579f8..6765e16 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -21,7 +21,6 @@ - site jar @@ -37,14 +36,16 @@ org.apache.maven.plugins - maven-project-info-reports-plugin - 3.4.5 - + maven-source-plugin + 3.3.0 - - org.apache.maven.plugins - maven-site-plugin - 3.12.1 + + + + jar + + + From 72a5960d28d3436c4ddbcfac2fff0d640862309f Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 12:33:44 +0200 Subject: [PATCH 23/51] GitHub Actions: Updates `build.yml` based on craftaro/GH-Commons --- .github/workflows/build.yml | 44 +++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 62db4d3..e692711 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,9 +11,9 @@ on: permissions: read-all env: - DEPLOYMENT_POM_PATH: ./dependency-reduced-pom.xml - DEPLOYMENT_ARTIFACT_DIR: ./target - DEPLOYMENT_ARTIFACT_SELECTOR: EpicAnchors-*.jar + DEPLOYMENT_POM_PATH: ./EpicAnchors-API/pom.xml + DEPLOYMENT_ARTIFACT_DIR: ./EpicAnchors-API/target + DEPLOYMENT_ARTIFACT_SELECTOR: EpicAnchors-API-*.jar jobs: Build: @@ -22,11 +22,12 @@ jobs: steps: - uses: actions/checkout@v3 + # TODO: Make sure the project doesn't need additional setup steps or change the action to your own. - name: Prepare Workspace uses: craftaro/GH-Commons/.github/actions/setup_workspace@master with: - maven_username: ${{ secrets.MAVEN_REPO_USERNAME }} - maven_password: ${{ secrets.MAVEN_REPO_PASSWORD }} + maven_username: ${{ secrets.PLUGINS_MAVEN_REPO_USERNAME }} + maven_password: ${{ secrets.PLUGINS_MAVEN_REPO_PASSWORD }} - name: Set project version uses: craftaro/GH-Commons/.github/actions/maven_set_project_version@master @@ -34,17 +35,18 @@ jobs: append_snapshot: ${{ github.ref_type == 'tag' && 'false' || 'true' }} version: ${{ github.ref_type == 'tag' && github.ref_name || '' }} increment_version: ${{ github.ref_type == 'tag' && '' || 'patch' }} + increment_version_only_if_not_snapshot_version: ${{ github.ref == 'refs/heads/development' && 'true' || 'false' }} - name: Build with Maven - run: mvn -B -Duser.name="GitHub Actions on $GITHUB_REPOSITORY (id=$GITHUB_RUN_ID)" -DskipTests clean package + run: mvn -B -Duser.name="GitHub Actions on $GITHUB_REPOSITORY (id=$GITHUB_RUN_ID)" clean package - name: Sign jar archives uses: craftaro/GH-Commons/.github/actions/sign_jars@master with: jar_file_selector: ${{ env.DEPLOYMENT_ARTIFACT_DIR }}/${{ env.DEPLOYMENT_ARTIFACT_SELECTOR }} - keystore_gpg_encrypted: ${{ secrets.JARSIGNER_KEYSTORE_ENCRYPTED }} - keystore_gpg_password: ${{ secrets.JARSIGNER_KEYSTORE_ENCRYPTED_PASSWORD }} - keystore_password: ${{ secrets.JARSIGNER_KEYSTORE_PASSWORD }} + keystore_gpg_encrypted: ${{ secrets.PLUGINS_JARSIGNER_KEYSTORE_GPG }} + keystore_gpg_password: ${{ secrets.PLUGINS_JARSIGNER_KEYSTORE_GPG_PASSWORD }} + keystore_password: ${{ secrets.PLUGINS_JARSIGNER_KEYSTORE_PASSWORD }} - name: Upload Build Artifacts uses: actions/upload-artifact@v3 @@ -52,14 +54,22 @@ jobs: name: ${{ github.event.repository.name }} path: ${{ env.DEPLOYMENT_ARTIFACT_DIR }}/${{ env.DEPLOYMENT_ARTIFACT_SELECTOR }} -# - name: Deploy to Maven repo -# if: ${{ github.event_name == 'push' }} -# uses: craftaro/GH-Commons/.github/actions/maven_deploy@master -# with: -# repository_url: ${{ secrets.MAVEN_REPO_URL_RELEASES }} -# repository_url_snapshots: ${{ secrets.MAVEN_REPO_URL_SNAPSHOTS }} -# maven_pom_path: ${{ env.DEPLOYMENT_POM_PATH }} -# maven_out_dir: ${{ env.DEPLOYMENT_ARTIFACT_DIR }} + - name: Deploy to Maven repo + if: ${{ github.event_name == 'push' }} + uses: craftaro/GH-Commons/.github/actions/maven_deploy@master + with: + repository_url: ${{ vars.PLUGINS_MAVEN_REPO_URL_RELEASE }} + repository_url_snapshots: ${{ vars.PLUGINS_MAVEN_REPO_URL_SNAPSHOT }} + maven_pom_path: ${{ env.DEPLOYMENT_POM_PATH }} + maven_out_dir: ${{ env.DEPLOYMENT_ARTIFACT_DIR }} + - name: Deploy parent pom.xml to Maven repo + if: ${{ github.event_name == 'push' }} + uses: craftaro/GH-Commons/.github/actions/maven_deploy@master + with: + repository_url: ${{ vars.PLUGINS_MAVEN_REPO_URL_RELEASE }} + repository_url_snapshots: ${{ vars.PLUGINS_MAVEN_REPO_URL_SNAPSHOT }} + only_deploy_pom: true + maven_out_dir: ${{ env.DEPLOYMENT_ARTIFACT_DIR }} discord_webhook: name: Send Discord Webhook From 200df50bf65a2f0bff071be1adb49eaaf3812af6 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 12:44:46 +0200 Subject: [PATCH 24/51] GitHub Actions: Additionally upload plugin jar as build artifact --- .github/workflows/build.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e692711..0aa26eb 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,6 +14,8 @@ env: DEPLOYMENT_POM_PATH: ./EpicAnchors-API/pom.xml DEPLOYMENT_ARTIFACT_DIR: ./EpicAnchors-API/target DEPLOYMENT_ARTIFACT_SELECTOR: EpicAnchors-API-*.jar + PLUGIN_ARTIFACT_DIR: ./EpicAnchors-Plugin/target + PLUGIN_ARTIFACT_SELECTOR: EpicAnchors-*.jar jobs: Build: @@ -22,7 +24,6 @@ jobs: steps: - uses: actions/checkout@v3 - # TODO: Make sure the project doesn't need additional setup steps or change the action to your own. - name: Prepare Workspace uses: craftaro/GH-Commons/.github/actions/setup_workspace@master with: @@ -48,11 +49,17 @@ jobs: keystore_gpg_password: ${{ secrets.PLUGINS_JARSIGNER_KEYSTORE_GPG_PASSWORD }} keystore_password: ${{ secrets.PLUGINS_JARSIGNER_KEYSTORE_PASSWORD }} - - name: Upload Build Artifacts + - name: Upload Build Artifacts [API] + uses: actions/upload-artifact@v3 + with: + name: ${{ github.event.repository.name }}-API + path: ${{ env.DEPLOYMENT_ARTIFACT_DIR }}/${{ env.DEPLOYMENT_ARTIFACT_SELECTOR }} + + - name: Upload Build Artifacts [Plugin] uses: actions/upload-artifact@v3 with: name: ${{ github.event.repository.name }} - path: ${{ env.DEPLOYMENT_ARTIFACT_DIR }}/${{ env.DEPLOYMENT_ARTIFACT_SELECTOR }} + path: ${{ env.PLUGIN_ARTIFACT_DIR }}/${{ env.PLUGIN_ARTIFACT_SELECTOR }} - name: Deploy to Maven repo if: ${{ github.event_name == 'push' }} @@ -62,6 +69,7 @@ jobs: repository_url_snapshots: ${{ vars.PLUGINS_MAVEN_REPO_URL_SNAPSHOT }} maven_pom_path: ${{ env.DEPLOYMENT_POM_PATH }} maven_out_dir: ${{ env.DEPLOYMENT_ARTIFACT_DIR }} + - name: Deploy parent pom.xml to Maven repo if: ${{ github.event_name == 'push' }} uses: craftaro/GH-Commons/.github/actions/maven_deploy@master From 8bcfca02926b6317707aa8adbfa903068a405601 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 24 Jun 2023 20:38:29 +0200 Subject: [PATCH 25/51] Migrate usage of CompatibleSound to XSound in the CraftaroCore-Snapshot --- .../main/java/com/craftaro/epicanchors/AnchorManagerImpl.java | 4 ++-- .../main/java/com/craftaro/epicanchors/guis/AnchorGui.java | 4 ++-- .../com/craftaro/epicanchors/listener/AnchorListener.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java index 4fbdd64..7c19a56 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java @@ -3,9 +3,9 @@ package com.craftaro.epicanchors; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.compatibility.CompatibleParticleHandler; -import com.craftaro.core.compatibility.CompatibleSound; import com.craftaro.core.hooks.HologramManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; +import com.craftaro.core.third_party.com.cryptomorin.xseries.XSound; import com.craftaro.core.third_party.de.tr7zw.nbtapi.NBTItem; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; @@ -287,7 +287,7 @@ public class AnchorManagerImpl implements AnchorManager { } // Particles & Sound - anchor.getWorld().playSound(anchorLoc, CompatibleSound.ENTITY_GENERIC_EXPLODE.getSound(), 10, 10); + XSound.ENTITY_GENERIC_EXPLODE.play(anchorLoc, 10, 10); CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(Settings.PARTICLE_DESTROY.getString()), anchor.getLocation().add(.5, .5, .5), 100, .5, .5, .5); diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java index 4d79980..dfaf051 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java @@ -1,11 +1,11 @@ package com.craftaro.epicanchors.guis; import com.craftaro.core.compatibility.CompatibleParticleHandler; -import com.craftaro.core.compatibility.CompatibleSound; import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; +import com.craftaro.core.third_party.com.cryptomorin.xseries.XSound; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; import com.craftaro.epicanchors.EpicAnchors; @@ -84,7 +84,7 @@ public class AnchorGui extends Gui { if (success) { anchor.addTicksLeft(20 * 60 * 30); // 30 minutes - p.playSound(p.getLocation(), CompatibleSound.ENTITY_PLAYER_LEVELUP.getSound(), 0.6F, 15); + XSound.ENTITY_PLAYER_LEVELUP.play(p, .6f, 15); CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(Settings.PARTICLE_UPGRADE.getString()), anchor.getLocation().add(.5, .5, .5), 100, .5, .5, .5); } else { diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java index e530ce5..58a2ce6 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java @@ -2,7 +2,7 @@ package com.craftaro.epicanchors.listener; import com.craftaro.core.compatibility.CompatibleHand; import com.craftaro.core.compatibility.CompatibleParticleHandler; -import com.craftaro.core.compatibility.CompatibleSound; +import com.craftaro.core.third_party.com.cryptomorin.xseries.XSound; import com.craftaro.epicanchors.AnchorManagerImpl; import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.api.Anchor; @@ -110,7 +110,7 @@ public class AnchorListener implements Listener { CompatibleHand.MAIN_HAND.takeItem(p, 1); } - p.playSound(p.getLocation(), CompatibleSound.ENTITY_PLAYER_LEVELUP.getSound(), .6F, 15); + XSound.ENTITY_PLAYER_LEVELUP.play(p, .6f, 15); CompatibleParticleHandler.spawnParticles(CompatibleParticleHandler.ParticleType.getParticle(Settings.PARTICLE_UPGRADE.getString()), anchor.getLocation().add(.5, .5, .5), 100, .5, .5, .5); } From 1a4a83441bf825b04c6857a5baf0e555e8d35a09 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Thu, 29 Jun 2023 11:28:45 +0200 Subject: [PATCH 26/51] Use `SpigotMC` as maven repository ID --- pom.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index b2d40e2..2fe1f35 100644 --- a/pom.xml +++ b/pom.xml @@ -44,13 +44,13 @@ - spigot-repo - https://hub.spigotmc.org/nexus/content/repositories/snapshots/ + craftaro-minecraft-plugins + https://repo.craftaro.com/repository/minecraft-plugins/ - craftaro-minecraft-plugins - https://repo.craftaro.com/repository/minecraft-plugins/ + SpigotMC + https://hub.spigotmc.org/nexus/content/repositories/snapshots/ From f3c8778ad261fb1059995eb981c621a2b4680eea Mon Sep 17 00:00:00 2001 From: ceze88 Date: Wed, 2 Aug 2023 17:20:52 +0200 Subject: [PATCH 27/51] Updates to new database system --- .../com/craftaro/epicanchors/api/Anchor.java | 3 +- .../com/craftaro/epicanchors/AnchorImpl.java | 38 +++ .../epicanchors/AnchorManagerImpl.java | 44 ++- .../com/craftaro/epicanchors/EpicAnchors.java | 19 +- .../epicanchors/files/DataManager.java | 306 ++++-------------- .../files/migration/AnchorMigration.java | 21 +- .../files/migration/_1_InitialMigration.java | 8 +- .../epicanchors/listener/AnchorListener.java | 2 +- .../epicanchors/utils/DataHelper.java | 101 ++++++ 9 files changed, 253 insertions(+), 289 deletions(-) create mode 100644 EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java diff --git a/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java index e7345c0..e61633c 100644 --- a/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java +++ b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java @@ -1,5 +1,6 @@ package com.craftaro.epicanchors.api; +import com.craftaro.core.database.Data; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; @@ -7,7 +8,7 @@ import org.jetbrains.annotations.NotNull; import java.util.UUID; -public interface Anchor { +public interface Anchor extends Data { int getDbId(); UUID getOwner(); diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java index c63feef..9a0e521 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java @@ -1,5 +1,7 @@ package com.craftaro.epicanchors; +import com.craftaro.core.database.Data; +import com.craftaro.core.database.SerializedLocation; import com.craftaro.epicanchors.api.Anchor; import com.craftaro.epicanchors.utils.WorldUtils; import org.bukkit.Bukkit; @@ -10,6 +12,8 @@ import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Objects; import java.util.UUID; @@ -21,6 +25,15 @@ public class AnchorImpl implements Anchor { private final Location location; private int ticksLeft; + /** + * Default constructor for deserialization. + */ + public AnchorImpl() { + dbId = 0; + owner = null; + location = null; + } + public AnchorImpl(int dbId, @Nullable UUID owner, @NotNull Location location, int ticksLeft) { if (dbId <= 0) throw new IllegalArgumentException("Invalid value for dbId"); if (ticksLeft <= 0 && ticksLeft != -1) throw new IllegalArgumentException("Invalid value for ticksLeft"); @@ -137,4 +150,29 @@ public class AnchorImpl implements Anchor { public boolean isInfinite() { return this.ticksLeft == -1; } + + @Override + public Map serialize() { + Map map = new LinkedHashMap<>(); + map.put("id", dbId); + map.putAll(SerializedLocation.of(location)); + map.put("ticks_left", ticksLeft); + map.put("owner", owner == null ? null : owner.toString()); + return map; + } + + @Override + public Data deserialize(Map map) { + return new AnchorImpl( + (int) map.get("id"), + map.get("owner") == null ? null : UUID.fromString((String) map.get("owner")), + SerializedLocation.of(map), + (int) map.get("ticks_left") + ); + } + + @Override + public String getTableName() { + return "anchors"; + } } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java index 7c19a56..3e22153 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java @@ -3,6 +3,8 @@ package com.craftaro.epicanchors; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.compatibility.CompatibleParticleHandler; +import com.craftaro.core.database.Data; +import com.craftaro.core.database.DataManager; import com.craftaro.core.hooks.HologramManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.third_party.com.cryptomorin.xseries.XSound; @@ -12,9 +14,9 @@ import com.craftaro.core.utils.TimeUtils; import com.craftaro.epicanchors.api.Anchor; import com.craftaro.epicanchors.api.AnchorAccessCheck; import com.craftaro.epicanchors.api.AnchorManager; -import com.craftaro.epicanchors.files.DataManager; import com.craftaro.epicanchors.files.Settings; import com.craftaro.epicanchors.utils.Callback; +import com.craftaro.epicanchors.utils.DataHelper; import com.craftaro.epicanchors.utils.UpdateCallback; import com.craftaro.epicanchors.utils.Utils; import org.bukkit.Bukkit; @@ -31,6 +33,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -62,7 +65,8 @@ public class AnchorManagerImpl implements AnchorManager { protected void saveAll() { for (Set anchorSet : this.anchors.values()) { - this.dataManager.updateAnchors(anchorSet, null); + Collection asData = new ArrayList<>(anchorSet.size()); + this.dataManager.saveBatch(asData); } } @@ -83,7 +87,7 @@ public class AnchorManagerImpl implements AnchorManager { long start = System.nanoTime(); - this.dataManager.getAnchors(world, (ex, result) -> { + DataHelper.getAnchors(world, (ex, result) -> { if (ex == null) { this.anchors.computeIfAbsent(world, key -> new HashSet<>()); @@ -114,8 +118,10 @@ public class AnchorManagerImpl implements AnchorManager { protected void deInitAnchors(@NotNull World world) { Set tmpAnchors = this.anchors.remove(world); + if (tmpAnchors != null) { - this.dataManager.updateAnchors(tmpAnchors, null); + Collection asData = new ArrayList<>(tmpAnchors.size()); + this.dataManager.saveBatch(asData); for (Anchor anchor : tmpAnchors) { ((AnchorImpl) anchor).deInit(this.plugin); @@ -229,27 +235,19 @@ public class AnchorManagerImpl implements AnchorManager { throw new IllegalStateException(ERR_WORLD_NOT_READY); } - this.dataManager.insertAnchorAsync(loc, Objects.requireNonNull(owner), ticks, (ex, anchor) -> { - if (ex != null) { - if (callback != null) { - callback.accept(ex, null); - } else { - Utils.logException(this.plugin, ex, "SQLite"); - } - } else { - Bukkit.getScheduler().runTask(this.plugin, () -> { - Block block = loc.getBlock(); - block.setType(Settings.MATERIAL.getMaterial().parseMaterial()); + Anchor anchor = new AnchorImpl(dataManager.getNextId("anchors"), owner, loc, ticks); + this.dataManager.save(anchor); + Bukkit.getScheduler().runTask(this.plugin, () -> { //TODO: Do we need to run this sync, or we are already on the main thread? + Block block = loc.getBlock(); + block.setType(Settings.MATERIAL.getMaterial().parseMaterial()); - this.anchors.computeIfAbsent(anchor.getWorld(), key -> new HashSet<>()) - .add(anchor); + this.anchors.computeIfAbsent(anchor.getWorld(), key -> new HashSet<>()) + .add(anchor); - updateHologram(anchor); + updateHologram(anchor); - if (callback != null) { - callback.accept(null, anchor); - } - }); + if (callback != null) { + callback.accept(null, anchor); } }); } @@ -292,7 +290,7 @@ public class AnchorManagerImpl implements AnchorManager { anchor.getLocation().add(.5, .5, .5), 100, .5, .5, .5); ((AnchorImpl) anchor).deInit(this.plugin); - this.dataManager.deleteAnchorAsync(anchor); + this.dataManager.delete(anchor); } /* Anchor access */ diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java index 154089e..265cf5c 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java @@ -30,6 +30,7 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.plugin.PluginManager; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.logging.Level; @@ -38,8 +39,6 @@ public final class EpicAnchors extends SongodaPlugin { private GuiManager guiManager; private AnchorManagerImpl anchorManager; - private DataManager dataManager; - @Override public void onPluginLoad() { } @@ -49,13 +48,15 @@ public final class EpicAnchors extends SongodaPlugin { SongodaCore.registerPlugin(this, 31, XMaterial.END_PORTAL_FRAME); // Initialize database - this.getLogger().info("Initializing SQLite..."); - DatabaseConnector dbCon = new SQLiteConnector(this); - this.dataManager = new DataManager(dbCon, this); - AnchorMigration anchorMigration = new AnchorMigration(dbCon, this.dataManager, new _1_InitialMigration()); - anchorMigration.runMigrations(); +// this.getLogger().info("Initializing SQLite..."); +// DatabaseConnector dbCon = new SQLiteConnector(this); +// this.dataManager = new DataManager(dbCon, this); +// AnchorMigration anchorMigration = new AnchorMigration(dbCon, this.dataManager, new _1_InitialMigration()); +// anchorMigration.runMigrations(); +// anchorMigration.migrateLegacyData(this); + + initDatabase(Arrays.asList(new _1_InitialMigration(), new AnchorMigration())); - anchorMigration.migrateLegacyData(this); this.anchorManager = new AnchorManagerImpl(this, this.dataManager); EpicAnchorsApi.initApi(this.anchorManager); @@ -100,7 +101,7 @@ public final class EpicAnchors extends SongodaPlugin { if (this.dataManager != null) { this.anchorManager.deInitAll(); - this.dataManager.close(); + this.dataManager.shutdown(); } // Remove all holograms diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java index 1daf7c0..8e196e3 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java @@ -1,6 +1,5 @@ package com.craftaro.epicanchors.files; -import com.craftaro.core.database.DataManagerAbstract; import com.craftaro.core.database.DatabaseConnector; import com.craftaro.epicanchors.AnchorImpl; import com.craftaro.epicanchors.api.Anchor; @@ -28,248 +27,71 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -public class DataManager extends DataManagerAbstract { - private final ExecutorService thread = Executors.newSingleThreadExecutor(); +public class DataManager { - private final String anchorTable; - public DataManager(DatabaseConnector databaseConnector, Plugin plugin) { - super(databaseConnector, plugin); - this.anchorTable = getTableName(super.getTablePrefix(), "anchors"); - } - - public void close() { - if (!this.thread.isShutdown()) { - this.thread.shutdown(); - - try { - if (!this.thread.awaitTermination(60, TimeUnit.SECONDS)) { - // Try stopping the thread forcefully (there is basically no hope left for the data) - this.thread.shutdownNow(); - } - } catch (InterruptedException ex) { - Utils.logException(super.plugin, ex); - } - - this.databaseConnector.closeConnection(); - } - } - - public void exists(@NotNull String worldName, int x, int y, int z, @NotNull Callback callback) { - this.databaseConnector.connect((con) -> { - try (PreparedStatement ps = con.prepareStatement("SELECT id FROM " + this.anchorTable + - " WHERE world_name =? AND x =? AND y =? AND z=?;")) { - ps.setString(1, worldName); - ps.setInt(2, x); - ps.setInt(3, y); - ps.setInt(4, z); - - ResultSet rs = ps.executeQuery(); - - callback.accept(null, rs.next()); - } catch (Exception ex) { - resolveCallback(callback, ex); - } - }); - } - - public void getAnchors(@Nullable World world, @NotNull Callback> callback) { - List result = new ArrayList<>(); - - this.databaseConnector.connect((con) -> { - try (PreparedStatement ps = con.prepareStatement("SELECT * FROM " + this.anchorTable + - (world != null ? " WHERE world_name =?" : "") + ";")) { - if (world != null) { - ps.setString(1, world.getName()); - } - - ResultSet rs = ps.executeQuery(); - - while (rs.next()) { - result.add(extractAnchor(rs)); - } - - callback.accept(null, result); - } catch (Exception ex) { - resolveCallback(callback, ex); - } - }); - } - - public void insertAnchorAsync(Location loc, UUID owner, int ticks, Callback callback) { - this.thread.execute(() -> insertAnchor(loc, owner, ticks, callback)); - } - - public void insertAnchor(Location loc, UUID owner, int ticks, Callback callback) { - this.databaseConnector.connect((con) -> { - try (PreparedStatement ps = con.prepareStatement("INSERT INTO " + this.anchorTable + - "(owner, world_name,x,y,z, ticks_left) VALUES (?,?,?,?,?, ?);");// Future SQLite version might support 'RETURNING *' - PreparedStatement psFetch = con.prepareStatement("SELECT * FROM " + this.anchorTable + - " WHERE world_name =? AND x =? AND y =? AND z=?;")) { - ps.setString(1, owner != null ? owner.toString() : null); - - ps.setString(2, Objects.requireNonNull(loc.getWorld()).getName()); - psFetch.setString(1, Objects.requireNonNull(loc.getWorld()).getName()); - - ps.setInt(3, loc.getBlockX()); - psFetch.setInt(2, loc.getBlockX()); - - ps.setInt(4, loc.getBlockY()); - psFetch.setInt(3, loc.getBlockY()); - - ps.setInt(5, loc.getBlockZ()); - psFetch.setInt(4, loc.getBlockZ()); - - ps.setInt(6, ticks); - - ps.executeUpdate(); - - if (callback != null) { - ResultSet rs = psFetch.executeQuery(); - rs.next(); - - callback.accept(null, extractAnchor(rs)); - } - } catch (Exception ex) { - resolveCallback(callback, ex); - } - }); - } - - public void migrateAnchor(List anchorEntries, UpdateCallback callback) { - this.databaseConnector.connect((con) -> { - con.setAutoCommit(false); - - SQLException err = null; - - try (PreparedStatement ps = con.prepareStatement("INSERT INTO " + this.anchorTable + - "(world_name,x,y,z, ticks_left) VALUES (?,?,?,?, ?);")) { - for (AnchorMigration.LegacyAnchorEntry entry : anchorEntries) { - ps.setString(1, entry.worldName); - ps.setInt(2, entry.x); - ps.setInt(3, entry.y); - ps.setInt(4, entry.z); - - ps.setInt(5, entry.ticksLeft); - - ps.addBatch(); - } - - int[] batchRes = ps.executeBatch(); - - for (int i : batchRes) { - if (i < 0 && i != Statement.SUCCESS_NO_INFO) { - throw new AssertionError("Batch-INSERT failed for at least one statement with code " + i); - } - } - } catch (SQLException ex) { - err = ex; - } - - if (err == null) { - con.commit(); - - resolveUpdateCallback(callback, null); - } else { - con.rollback(); - - resolveUpdateCallback(callback, err); - } - - con.setAutoCommit(true); - }); - } - - public void updateAnchors(Collection anchors, UpdateCallback callback) { - this.databaseConnector.connect((con) -> { - con.setAutoCommit(false); - - SQLException err = null; - - for (Anchor anchor : anchors) { - try (PreparedStatement ps = con.prepareStatement("UPDATE " + this.anchorTable + - " SET ticks_left =? WHERE id =?;")) { - ps.setInt(1, anchor.getTicksLeft()); - ps.setInt(2, anchor.getDbId()); - - ps.executeUpdate(); - } catch (SQLException ex) { - err = ex; - break; - } - } - - if (err == null) { - con.commit(); - - resolveUpdateCallback(callback, null); - } else { - con.rollback(); - - resolveUpdateCallback(callback, err); - } - - con.setAutoCommit(true); - }); - } - - public void deleteAnchorAsync(Anchor anchor) { - deleteAnchorAsync(anchor, null); - } - - public void deleteAnchorAsync(Anchor anchor, UpdateCallback callback) { - this.thread.execute(() -> - this.databaseConnector.connect((con) -> { - try (PreparedStatement ps = con.prepareStatement("DELETE FROM " + this.anchorTable + - " WHERE id =?;")) { - ps.setInt(1, anchor.getDbId()); - - ps.executeUpdate(); - - resolveUpdateCallback(callback, null); - } catch (Exception ex) { - resolveUpdateCallback(callback, ex); - } - }) - ); - } - - public static String getTableName(String prefix, String name) { - String result = prefix + name; - - if (!result.matches("[a-z0-9_]+")) { - throw new IllegalStateException("The generated table name '" + result + "' contains invalid characters"); - } - - return result; - } - - private Anchor extractAnchor(ResultSet rs) throws SQLException { - String ownerStr = rs.getString("owner"); - - return new AnchorImpl(rs.getInt("id"), - ownerStr != null ? UUID.fromString(ownerStr) : null, - new Location(Bukkit.getWorld(rs.getString("world_name")), - rs.getInt("x"), - rs.getInt("y"), - rs.getInt("z")), - rs.getInt("ticks_left")); - } - - private void resolveUpdateCallback(@Nullable UpdateCallback callback, @Nullable Exception ex) { - if (callback != null) { - callback.accept(ex); - } else if (ex != null) { - Utils.logException(this.plugin, ex, "SQLite"); - } - } - - private void resolveCallback(@Nullable Callback callback, @NotNull Exception ex) { - if (callback != null) { - callback.accept(ex, null); - } else { - Utils.logException(this.plugin, ex, "SQLite"); - } - } +// public void updateAnchors(Collection anchors, UpdateCallback callback) { +// this.databaseConnector.connect((con) -> { +// con.setAutoCommit(false); +// +// SQLException err = null; +// +// for (Anchor anchor : anchors) { +// try (PreparedStatement ps = con.prepareStatement("UPDATE " + this.anchorTable + +// " SET ticks_left =? WHERE id =?;")) { +// ps.setInt(1, anchor.getTicksLeft()); +// ps.setInt(2, anchor.getDbId()); +// +// ps.executeUpdate(); +// } catch (SQLException ex) { +// err = ex; +// break; +// } +// } +// +// if (err == null) { +// con.commit(); +// +// resolveUpdateCallback(callback, null); +// } else { +// con.rollback(); +// +// resolveUpdateCallback(callback, err); +// } +// +// con.setAutoCommit(true); +// }); +// } +// +// public void deleteAnchorAsync(Anchor anchor) { +// deleteAnchorAsync(anchor, null); +// } +// +// public void deleteAnchorAsync(Anchor anchor, UpdateCallback callback) { +// this.thread.execute(() -> +// this.databaseConnector.connect((con) -> { +// try (PreparedStatement ps = con.prepareStatement("DELETE FROM " + this.anchorTable + +// " WHERE id =?;")) { +// ps.setInt(1, anchor.getDbId()); +// +// ps.executeUpdate(); +// +// resolveUpdateCallback(callback, null); +// } catch (Exception ex) { +// resolveUpdateCallback(callback, ex); +// } +// }) +// ); +// } +// +// public static String getTableName(String prefix, String name) { +// String result = prefix + name; +// +// if (!result.matches("[a-z0-9_]+")) { +// throw new IllegalStateException("The generated table name '" + result + "' contains invalid characters"); +// } +// +// return result; +// } } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java index ed9483a..2de69ca 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java @@ -3,31 +3,32 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.configuration.Config; import com.craftaro.core.configuration.ConfigSection; import com.craftaro.core.database.DataMigration; -import com.craftaro.core.database.DataMigrationManager; import com.craftaro.core.database.DatabaseConnector; +import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.files.DataManager; +import com.craftaro.epicanchors.utils.DataHelper; import com.craftaro.epicanchors.utils.ThreadSync; import org.bukkit.Location; import org.bukkit.plugin.Plugin; import java.io.IOException; import java.nio.file.Files; +import java.sql.Connection; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; -public class AnchorMigration extends DataMigrationManager { - private final DataManager dataManager; +public class AnchorMigration extends DataMigration { - public AnchorMigration(DatabaseConnector databaseConnector, DataManager dataManager, DataMigration... migrations) { - super(databaseConnector, dataManager, migrations); - - this.dataManager = dataManager; + public AnchorMigration() { + super(2); } - public void migrateLegacyData(Plugin plugin) { + @Override + public void migrate(DatabaseConnector databaseConnector, String tablePrefix) { + Plugin plugin = EpicAnchors.getPlugin(EpicAnchors.class); long start = System.nanoTime(); AtomicBoolean abortMigration = new AtomicBoolean(false); @@ -67,7 +68,7 @@ public class AnchorMigration extends DataMigrationManager { int z = Location.locToBlock(Double.parseDouble(locArgs[3])); int finalTicksLeft = ticksLeft; - this.dataManager.exists(worldName, x, y, z, (ex, anchorExists) -> { + DataHelper.exists(worldName, x, y, z, (ex, anchorExists) -> { if (ex == null) { if (anchorExists) { cfgSection.set(locationStr, null); @@ -94,7 +95,7 @@ public class AnchorMigration extends DataMigrationManager { if (!abortMigration.get()) { int finalMigratedAnchors = migratedAnchors; - this.dataManager.migrateAnchor(anchorQueue, ex -> { + DataHelper.migrateAnchor(anchorQueue, ex -> { long end = System.nanoTime(); if (ex == null) { diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java index ac135f1..67ba8d0 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java @@ -1,6 +1,8 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.database.DataMigration; +import com.craftaro.core.database.DatabaseConnector; +import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.files.DataManager; import java.sql.Connection; @@ -13,9 +15,9 @@ public class _1_InitialMigration extends DataMigration { } @Override - public void migrate(Connection connection, String tablePrefix) throws SQLException { - try (Statement statement = connection.createStatement()) { - statement.execute("CREATE TABLE " + DataManager.getTableName(tablePrefix, "anchors") + "(" + + public void migrate(DatabaseConnector databaseConnector, String tablePrefix) throws SQLException { + try (Statement statement = databaseConnector.getConnection().createStatement()) { + statement.execute("CREATE TABLE " + EpicAnchors.getPlugin(EpicAnchors.class).getDataManager().getTablePrefix() + "anchors (" + "id INTEGER NOT NULL," + "world_name TEXT NOT NULL," + "x INTEGER NOT NULL," + diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java index 58a2ce6..0c47201 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java @@ -49,7 +49,7 @@ public class AnchorListener implements Listener { this.plugin.getAnchorManager().createAnchor(e.getBlock().getLocation(), e.getPlayer().getUniqueId(), ticksLeft, (ex, result) -> { if (ex != null) { - Utils.logException(this.plugin, ex, "SQLite"); + Utils.logException(this.plugin, ex, "SQL"); e.getPlayer().sendMessage("Error creating anchor!"); // TODO Bukkit.getScheduler().runTask(this.plugin, () -> { diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java new file mode 100644 index 0000000..d95eb5b --- /dev/null +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java @@ -0,0 +1,101 @@ +package com.craftaro.epicanchors.utils; + +import com.craftaro.core.database.Data; +import com.craftaro.core.database.DataManager; +import com.craftaro.core.third_party.org.jooq.Queries; +import com.craftaro.core.third_party.org.jooq.Query; +import com.craftaro.core.third_party.org.jooq.Record1; +import com.craftaro.core.third_party.org.jooq.Result; +import com.craftaro.core.third_party.org.jooq.impl.DSL; +import com.craftaro.epicanchors.AnchorImpl; +import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.files.migration.AnchorMigration; +import org.bukkit.World; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +public class DataHelper { + + public static void exists(@NotNull String worldName, int x, int y, int z, @NotNull Callback callback) { + DataManager dataManager = EpicAnchors.getPlugin(EpicAnchors.class).getDataManager(); + + dataManager.getDatabaseConnector().connectDSL(dslContext -> { + try { + @NotNull Result> result = dslContext.select(DSL.field("id")).from(DSL.table(dataManager.getTablePrefix() + "anchors")) + .where(DSL.field("world_name").eq(worldName)) + .and(DSL.field("x").eq(x)) + .and(DSL.field("y").eq(y)) + .and(DSL.field("z").eq(z)).fetch(); + + callback.accept(null, result.size() > 0); + } catch (Exception ex) { + resolveCallback(callback, ex); + } + }); + } + + public static void getAnchors(@Nullable World world, @NotNull Callback> callback) { + try { + callback.accept(null, EpicAnchors.getPlugin(EpicAnchors.class).getDataManager().loadBatch(AnchorImpl.class, "anchors")); + } catch (Exception ex) { + resolveCallback(callback, ex); + } + } + + private static void resolveUpdateCallback(@Nullable UpdateCallback callback, @Nullable Exception ex) { + if (callback != null) { + callback.accept(ex); + } else if (ex != null) { + Utils.logException(EpicAnchors.getPlugin(EpicAnchors.class), ex, "SQL"); + } + } + + private static void resolveCallback(@Nullable Callback callback, @NotNull Exception ex) { + if (callback != null) { + callback.accept(ex, null); + } else { + Utils.logException(EpicAnchors.getPlugin(EpicAnchors.class), ex, "SQL"); + } + } + + + public static void migrateAnchor(List anchorQueue, UpdateCallback callback) { + DataManager dataManager = EpicAnchors.getPlugin(EpicAnchors.class).getDataManager(); + + //recreate it with Jooq + dataManager.getDatabaseConnector().connectDSL(dslContext -> { + Connection connection = dslContext.configuration().connectionProvider().acquire(); + connection.setAutoCommit(false); + try { + List queries = new ArrayList<>(); + for (AnchorMigration.LegacyAnchorEntry entry : anchorQueue) { + queries.add(dslContext.insertInto(DSL.table(dataManager.getTablePrefix() + "anchors")) + .columns( + DSL.field("world_name"), + DSL.field("x"), + DSL.field("y"), + DSL.field("z"), + DSL.field("ticks_left")) + .values(entry.worldName, entry.x, entry.y, entry.z, entry.ticksLeft)); + } + dslContext.batch(queries).execute(); + connection.commit(); + } catch (Exception ex) { + connection.rollback(); + resolveUpdateCallback(callback, ex); + } finally { + connection.setAutoCommit(true); + dslContext.configuration().connectionProvider().release(connection); + } + }); + } +} From 9863b93b4108d4a5ee68daec5acac4cc13503e84 Mon Sep 17 00:00:00 2001 From: ceze88 Date: Wed, 2 Aug 2023 17:46:30 +0200 Subject: [PATCH 28/51] Fixes method names --- .../main/java/com/craftaro/epicanchors/files/Settings.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java index 466d14c..9e47c3b 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java @@ -83,13 +83,13 @@ public class Settings { // convert glass pane settings int color; if ((color = GLASS_TYPE_1.getInt(-1)) != -1) { - CONFIG.set(GLASS_TYPE_1.getKey(), CompatibleMaterial.getGlassPaneColor(color).name()); + CONFIG.set(GLASS_TYPE_1.getKey(), CompatibleMaterial.getGlassPaneForColor(color).name()); } if ((color = GLASS_TYPE_2.getInt(-1)) != -1) { - CONFIG.set(GLASS_TYPE_2.getKey(), CompatibleMaterial.getGlassPaneColor(color).name()); + CONFIG.set(GLASS_TYPE_2.getKey(), CompatibleMaterial.getGlassPaneForColor(color).name()); } if ((color = GLASS_TYPE_3.getInt(-1)) != -1) { - CONFIG.set(GLASS_TYPE_3.getKey(), CompatibleMaterial.getGlassPaneColor(color).name()); + CONFIG.set(GLASS_TYPE_3.getKey(), CompatibleMaterial.getGlassPaneForColor(color).name()); } // convert economy settings From 330164ae336471a6ef63c41914d536941e56d07e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 1 Jul 2023 12:37:05 +0000 Subject: [PATCH 29/51] Bump maven-shade-plugin from 3.4.1 to 3.5.0 Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.4.1 to 3.5.0. - [Release notes](https://github.com/apache/maven-shade-plugin/releases) - [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.4.1...maven-shade-plugin-3.5.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-shade-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- EpicAnchors-Plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 62e7337..6715602 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -17,7 +17,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.4.1 + 3.5.0 From ef6f4a8c8cec5c97ee7871728bb8c8e52d886440 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 12:34:57 +0200 Subject: [PATCH 30/51] Bump org.apache.maven.plugins:maven-shade-plugin from 3.5.0 to 3.5.1 (#31) Bumps [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/apache/maven-shade-plugin/releases) - [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.5.0...maven-shade-plugin-3.5.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-shade-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- EpicAnchors-Plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 6715602..be61315 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -17,7 +17,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.0 + 3.5.1 From 22c99005ddb1c517ad08e7673361279100b280b0 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Mon, 23 Oct 2023 16:49:59 +0200 Subject: [PATCH 31/51] Make database migrations compatible with latest CraftaroCore snapshot --- .../epicanchors/files/migration/AnchorMigration.java | 5 +---- .../epicanchors/files/migration/_1_InitialMigration.java | 6 ++---- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java index 2de69ca..4d50db1 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java @@ -3,9 +3,7 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.configuration.Config; import com.craftaro.core.configuration.ConfigSection; import com.craftaro.core.database.DataMigration; -import com.craftaro.core.database.DatabaseConnector; import com.craftaro.epicanchors.EpicAnchors; -import com.craftaro.epicanchors.files.DataManager; import com.craftaro.epicanchors.utils.DataHelper; import com.craftaro.epicanchors.utils.ThreadSync; import org.bukkit.Location; @@ -21,13 +19,12 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; public class AnchorMigration extends DataMigration { - public AnchorMigration() { super(2); } @Override - public void migrate(DatabaseConnector databaseConnector, String tablePrefix) { + public void migrate(Connection connection, String tablePrefix) { Plugin plugin = EpicAnchors.getPlugin(EpicAnchors.class); long start = System.nanoTime(); diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java index 67ba8d0..250e5fb 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java @@ -1,9 +1,7 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.database.DataMigration; -import com.craftaro.core.database.DatabaseConnector; import com.craftaro.epicanchors.EpicAnchors; -import com.craftaro.epicanchors.files.DataManager; import java.sql.Connection; import java.sql.SQLException; @@ -15,8 +13,8 @@ public class _1_InitialMigration extends DataMigration { } @Override - public void migrate(DatabaseConnector databaseConnector, String tablePrefix) throws SQLException { - try (Statement statement = databaseConnector.getConnection().createStatement()) { + public void migrate(Connection connection, String tablePrefix) throws SQLException { + try (Statement statement = connection.createStatement()) { statement.execute("CREATE TABLE " + EpicAnchors.getPlugin(EpicAnchors.class).getDataManager().getTablePrefix() + "anchors (" + "id INTEGER NOT NULL," + "world_name TEXT NOT NULL," + From 9e850c5a49411810d46b5748aa08d45aaee97271 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Mon, 23 Oct 2023 17:54:42 +0200 Subject: [PATCH 32/51] Release v3.0.0-b2-SNAPSHOT --- EpicAnchors-API/pom.xml | 2 +- EpicAnchors-Plugin/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 6765e16..425a651 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 3.0.0-SNAPSHOT + 3.0.0-b2-SNAPSHOT ../pom.xml EpicAnchors-API diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index be61315..1d44dfc 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 3.0.0-SNAPSHOT + 3.0.0-b2-SNAPSHOT ../pom.xml EpicAnchors-Plugin diff --git a/pom.xml b/pom.xml index 2fe1f35..8250f9e 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent pom - 3.0.0-SNAPSHOT + 3.0.0-b2-SNAPSHOT From 2eec84444770df53b68af1b09d272589c3079319 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Tue, 24 Oct 2023 01:42:04 +0200 Subject: [PATCH 33/51] fix: A lot of issues introduced after migrating to the new database API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The new database API introduced a lot of breaking changes and changed behaviour sadly. When migrating this plugin to the new API these were not taken into account properly and essentially broke the whole database/storage layer of the plugin. * SQL statements that were valid in SQLite but are not in H2, which is now the default * H2 jdbc driver not being shaded into the final jar * catching exceptions, logging a message, and then continuing code execution (in the core) * introducing race conditions * ... These fixes sometimes rely on the non-multi-threaded APIs provided now which will most certaintly come with a performance hit on larger servers. But at least it works again... tbh I do not really want to spend too much time fixing this stuff... A potential issue that still exists in the use of `DataManager#getNextId` in `AnchorManagerImpl`. Right now it returns a value based on the largest ID currently in the database – Completely circumventing the whole auto_increment characteristic of the table schema... This is another changed behaviour that gets introduced opening the possibility for conflicting IDs *outside* of the database table itself. The ID can be used as a reference in other places --- EpicAnchors-Plugin/pom.xml | 1 + .../epicanchors/AnchorManagerImpl.java | 8 +- .../com/craftaro/epicanchors/EpicAnchors.java | 15 +-- .../epicanchors/files/DataManager.java | 97 ------------------- .../files/migration/_1_InitialMigration.java | 8 +- ...Migration.java => _2_AnchorMigration.java} | 4 +- .../epicanchors/utils/DataHelper.java | 12 +-- 7 files changed, 15 insertions(+), 130 deletions(-) delete mode 100644 EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java rename EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/{AnchorMigration.java => _2_AnchorMigration.java} (98%) diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 1d44dfc..e7c07dd 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -56,6 +56,7 @@ false **/nms/v*/** + **/core/third_party/org/h2/** diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java index 3e22153..6f8b54e 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java @@ -66,7 +66,7 @@ public class AnchorManagerImpl implements AnchorManager { protected void saveAll() { for (Set anchorSet : this.anchors.values()) { Collection asData = new ArrayList<>(anchorSet.size()); - this.dataManager.saveBatch(asData); + this.dataManager.saveBatchSync(asData); } } @@ -121,7 +121,7 @@ public class AnchorManagerImpl implements AnchorManager { if (tmpAnchors != null) { Collection asData = new ArrayList<>(tmpAnchors.size()); - this.dataManager.saveBatch(asData); + this.dataManager.saveBatchSync(asData); for (Anchor anchor : tmpAnchors) { ((AnchorImpl) anchor).deInit(this.plugin); @@ -236,7 +236,7 @@ public class AnchorManagerImpl implements AnchorManager { } Anchor anchor = new AnchorImpl(dataManager.getNextId("anchors"), owner, loc, ticks); - this.dataManager.save(anchor); + this.dataManager.saveSync(anchor); Bukkit.getScheduler().runTask(this.plugin, () -> { //TODO: Do we need to run this sync, or we are already on the main thread? Block block = loc.getBlock(); block.setType(Settings.MATERIAL.getMaterial().parseMaterial()); @@ -290,7 +290,7 @@ public class AnchorManagerImpl implements AnchorManager { anchor.getLocation().add(.5, .5, .5), 100, .5, .5, .5); ((AnchorImpl) anchor).deInit(this.plugin); - this.dataManager.delete(anchor); + this.dataManager.deleteSync(anchor); } /* Anchor access */ diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java index 265cf5c..c2c6bf7 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java @@ -4,8 +4,6 @@ import com.craftaro.core.SongodaCore; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.commands.CommandManager; import com.craftaro.core.configuration.Config; -import com.craftaro.core.database.DatabaseConnector; -import com.craftaro.core.database.SQLiteConnector; import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.hooks.HologramManager; @@ -16,9 +14,8 @@ import com.craftaro.epicanchors.commands.sub.GiveCommand; import com.craftaro.epicanchors.commands.sub.ReloadCommand; import com.craftaro.epicanchors.commands.sub.SettingsCommand; import com.craftaro.epicanchors.commands.sub.ShowCommand; -import com.craftaro.epicanchors.files.DataManager; import com.craftaro.epicanchors.files.Settings; -import com.craftaro.epicanchors.files.migration.AnchorMigration; +import com.craftaro.epicanchors.files.migration._2_AnchorMigration; import com.craftaro.epicanchors.files.migration._1_InitialMigration; import com.craftaro.epicanchors.listener.AnchorListener; import com.craftaro.epicanchors.listener.BlockListener; @@ -47,15 +44,7 @@ public final class EpicAnchors extends SongodaPlugin { public void onPluginEnable() { SongodaCore.registerPlugin(this, 31, XMaterial.END_PORTAL_FRAME); - // Initialize database -// this.getLogger().info("Initializing SQLite..."); -// DatabaseConnector dbCon = new SQLiteConnector(this); -// this.dataManager = new DataManager(dbCon, this); -// AnchorMigration anchorMigration = new AnchorMigration(dbCon, this.dataManager, new _1_InitialMigration()); -// anchorMigration.runMigrations(); -// anchorMigration.migrateLegacyData(this); - - initDatabase(Arrays.asList(new _1_InitialMigration(), new AnchorMigration())); + initDatabase(Arrays.asList(new _1_InitialMigration(), new _2_AnchorMigration())); this.anchorManager = new AnchorManagerImpl(this, this.dataManager); EpicAnchorsApi.initApi(this.anchorManager); diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java deleted file mode 100644 index 8e196e3..0000000 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.craftaro.epicanchors.files; - -import com.craftaro.core.database.DatabaseConnector; -import com.craftaro.epicanchors.AnchorImpl; -import com.craftaro.epicanchors.api.Anchor; -import com.craftaro.epicanchors.files.migration.AnchorMigration; -import com.craftaro.epicanchors.utils.Callback; -import com.craftaro.epicanchors.utils.UpdateCallback; -import com.craftaro.epicanchors.utils.Utils; -import org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.plugin.Plugin; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.ArrayList; -import java.util.Collection; -import java.util.List; -import java.util.Objects; -import java.util.UUID; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.TimeUnit; - -public class DataManager { - - - -// public void updateAnchors(Collection anchors, UpdateCallback callback) { -// this.databaseConnector.connect((con) -> { -// con.setAutoCommit(false); -// -// SQLException err = null; -// -// for (Anchor anchor : anchors) { -// try (PreparedStatement ps = con.prepareStatement("UPDATE " + this.anchorTable + -// " SET ticks_left =? WHERE id =?;")) { -// ps.setInt(1, anchor.getTicksLeft()); -// ps.setInt(2, anchor.getDbId()); -// -// ps.executeUpdate(); -// } catch (SQLException ex) { -// err = ex; -// break; -// } -// } -// -// if (err == null) { -// con.commit(); -// -// resolveUpdateCallback(callback, null); -// } else { -// con.rollback(); -// -// resolveUpdateCallback(callback, err); -// } -// -// con.setAutoCommit(true); -// }); -// } -// -// public void deleteAnchorAsync(Anchor anchor) { -// deleteAnchorAsync(anchor, null); -// } -// -// public void deleteAnchorAsync(Anchor anchor, UpdateCallback callback) { -// this.thread.execute(() -> -// this.databaseConnector.connect((con) -> { -// try (PreparedStatement ps = con.prepareStatement("DELETE FROM " + this.anchorTable + -// " WHERE id =?;")) { -// ps.setInt(1, anchor.getDbId()); -// -// ps.executeUpdate(); -// -// resolveUpdateCallback(callback, null); -// } catch (Exception ex) { -// resolveUpdateCallback(callback, ex); -// } -// }) -// ); -// } -// -// public static String getTableName(String prefix, String name) { -// String result = prefix + name; -// -// if (!result.matches("[a-z0-9_]+")) { -// throw new IllegalStateException("The generated table name '" + result + "' contains invalid characters"); -// } -// -// return result; -// } -} diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java index 250e5fb..3baca8d 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java @@ -1,7 +1,6 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.database.DataMigration; -import com.craftaro.epicanchors.EpicAnchors; import java.sql.Connection; import java.sql.SQLException; @@ -15,15 +14,14 @@ public class _1_InitialMigration extends DataMigration { @Override public void migrate(Connection connection, String tablePrefix) throws SQLException { try (Statement statement = connection.createStatement()) { - statement.execute("CREATE TABLE " + EpicAnchors.getPlugin(EpicAnchors.class).getDataManager().getTablePrefix() + "anchors (" + - "id INTEGER NOT NULL," + + statement.execute("CREATE TABLE " + tablePrefix + "anchors (" + + "id INTEGER NOT NULL PRIMARY KEY auto_increment," + "world_name TEXT NOT NULL," + "x INTEGER NOT NULL," + "y INTEGER NOT NULL," + "z INTEGER NOT NULL," + "ticks_left INTEGER NOT NULL," + - "owner VARCHAR(36)," + - "PRIMARY KEY(id AUTOINCREMENT)" + + "owner VARCHAR(36)" + ");"); } } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_2_AnchorMigration.java similarity index 98% rename from EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_2_AnchorMigration.java index 4d50db1..3b262ae 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_2_AnchorMigration.java @@ -18,8 +18,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; -public class AnchorMigration extends DataMigration { - public AnchorMigration() { +public class _2_AnchorMigration extends DataMigration { + public _2_AnchorMigration() { super(2); } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java index d95eb5b..f718e38 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java @@ -1,8 +1,6 @@ package com.craftaro.epicanchors.utils; -import com.craftaro.core.database.Data; import com.craftaro.core.database.DataManager; -import com.craftaro.core.third_party.org.jooq.Queries; import com.craftaro.core.third_party.org.jooq.Query; import com.craftaro.core.third_party.org.jooq.Record1; import com.craftaro.core.third_party.org.jooq.Result; @@ -10,17 +8,13 @@ import com.craftaro.core.third_party.org.jooq.impl.DSL; import com.craftaro.epicanchors.AnchorImpl; import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.api.Anchor; -import com.craftaro.epicanchors.files.migration.AnchorMigration; +import com.craftaro.epicanchors.files.migration._2_AnchorMigration; import org.bukkit.World; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; import java.util.List; public class DataHelper { @@ -68,7 +62,7 @@ public class DataHelper { } - public static void migrateAnchor(List anchorQueue, UpdateCallback callback) { + public static void migrateAnchor(List<_2_AnchorMigration.LegacyAnchorEntry> anchorQueue, UpdateCallback callback) { DataManager dataManager = EpicAnchors.getPlugin(EpicAnchors.class).getDataManager(); //recreate it with Jooq @@ -77,7 +71,7 @@ public class DataHelper { connection.setAutoCommit(false); try { List queries = new ArrayList<>(); - for (AnchorMigration.LegacyAnchorEntry entry : anchorQueue) { + for (_2_AnchorMigration.LegacyAnchorEntry entry : anchorQueue) { queries.add(dslContext.insertInto(DSL.table(dataManager.getTablePrefix() + "anchors")) .columns( DSL.field("world_name"), From a539306d4611f4465d35a624b847512795b72693 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Nov 2023 15:45:51 +0100 Subject: [PATCH 34/51] Bump actions/checkout from 3 to 4 (#32) Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 4 ++-- .github/workflows/sonarcloud.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0aa26eb..24cf09d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -23,7 +23,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Prepare Workspace uses: craftaro/GH-Commons/.github/actions/setup_workspace@master with: @@ -87,7 +87,7 @@ jobs: if: ${{ always() && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/development' || github.ref_type == 'tag') }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Notify Webhook uses: craftaro/GH-Commons/.github/actions/discord_send_job_results@master with: diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index e833985..69403a1 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -17,7 +17,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 From 8cbf1b789c43874a37aed456ef6f8e55243b6406 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Nov 2023 15:43:22 +0100 Subject: [PATCH 35/51] Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.5.0 to 3.6.0 (#33) Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.5.0 to 3.6.0. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.5.0...maven-javadoc-plugin-3.6.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- EpicAnchors-API/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 425a651..6510a42 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -17,7 +17,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.5.0 + 3.6.0 From 0bfeb6a2f00d05b92dfb50c3e0fb2029b7533624 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 18:39:03 +0100 Subject: [PATCH 36/51] Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.6.0 to 3.6.2 (#34) Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.6.0 to 3.6.2. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.6.0...maven-javadoc-plugin-3.6.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- EpicAnchors-API/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 6510a42..8666399 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -17,7 +17,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.6.0 + 3.6.2 From 0cb90ec12ae7fa6a9270d4ed301b100065290024 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 18:47:14 +0100 Subject: [PATCH 37/51] Bump org.jetbrains:annotations from 24.0.1 to 24.1.0 (#35) Bumps [org.jetbrains:annotations](https://github.com/JetBrains/java-annotations) from 24.0.1 to 24.1.0. - [Release notes](https://github.com/JetBrains/java-annotations/releases) - [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md) - [Commits](https://github.com/JetBrains/java-annotations/compare/24.0.1...24.1.0) --- updated-dependencies: - dependency-name: org.jetbrains:annotations dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8250f9e..530c881 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ org.jetbrains annotations - 24.0.1 + 24.1.0 provided From d6d7d1f1bfd155a4b0670d960517f401cda50c27 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 13:51:55 +0100 Subject: [PATCH 38/51] Bump actions/upload-artifact from 3 to 4 (#37) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 24cf09d..67fc6c9 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -50,13 +50,13 @@ jobs: keystore_password: ${{ secrets.PLUGINS_JARSIGNER_KEYSTORE_PASSWORD }} - name: Upload Build Artifacts [API] - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ github.event.repository.name }}-API path: ${{ env.DEPLOYMENT_ARTIFACT_DIR }}/${{ env.DEPLOYMENT_ARTIFACT_SELECTOR }} - name: Upload Build Artifacts [Plugin] - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ github.event.repository.name }} path: ${{ env.PLUGIN_ARTIFACT_DIR }}/${{ env.PLUGIN_ARTIFACT_SELECTOR }} From ab968ea984e93f4807b2865b3949e55721574443 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 1 Jan 2024 13:52:22 +0100 Subject: [PATCH 39/51] Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.6.2 to 3.6.3 (#36) Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.6.2 to 3.6.3. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.6.2...maven-javadoc-plugin-3.6.3) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- EpicAnchors-API/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 8666399..fdd952e 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -17,7 +17,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.6.2 + 3.6.3 From fadb84f2a9a953812b832bfcfdd2e26746580aa8 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Tue, 24 Oct 2023 01:51:02 +0200 Subject: [PATCH 40/51] Revert "fix: A lot of issues introduced after migrating to the new database API" This reverts commit 2eec84444770df53b68af1b09d272589c3079319. --- EpicAnchors-Plugin/pom.xml | 1 - .../epicanchors/AnchorManagerImpl.java | 8 +- .../com/craftaro/epicanchors/EpicAnchors.java | 15 ++- .../epicanchors/files/DataManager.java | 97 +++++++++++++++++++ ...horMigration.java => AnchorMigration.java} | 4 +- .../files/migration/_1_InitialMigration.java | 8 +- .../epicanchors/utils/DataHelper.java | 12 ++- 7 files changed, 130 insertions(+), 15 deletions(-) create mode 100644 EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java rename EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/{_2_AnchorMigration.java => AnchorMigration.java} (98%) diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index e7c07dd..1d44dfc 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -56,7 +56,6 @@ false **/nms/v*/** - **/core/third_party/org/h2/** diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java index 6f8b54e..3e22153 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java @@ -66,7 +66,7 @@ public class AnchorManagerImpl implements AnchorManager { protected void saveAll() { for (Set anchorSet : this.anchors.values()) { Collection asData = new ArrayList<>(anchorSet.size()); - this.dataManager.saveBatchSync(asData); + this.dataManager.saveBatch(asData); } } @@ -121,7 +121,7 @@ public class AnchorManagerImpl implements AnchorManager { if (tmpAnchors != null) { Collection asData = new ArrayList<>(tmpAnchors.size()); - this.dataManager.saveBatchSync(asData); + this.dataManager.saveBatch(asData); for (Anchor anchor : tmpAnchors) { ((AnchorImpl) anchor).deInit(this.plugin); @@ -236,7 +236,7 @@ public class AnchorManagerImpl implements AnchorManager { } Anchor anchor = new AnchorImpl(dataManager.getNextId("anchors"), owner, loc, ticks); - this.dataManager.saveSync(anchor); + this.dataManager.save(anchor); Bukkit.getScheduler().runTask(this.plugin, () -> { //TODO: Do we need to run this sync, or we are already on the main thread? Block block = loc.getBlock(); block.setType(Settings.MATERIAL.getMaterial().parseMaterial()); @@ -290,7 +290,7 @@ public class AnchorManagerImpl implements AnchorManager { anchor.getLocation().add(.5, .5, .5), 100, .5, .5, .5); ((AnchorImpl) anchor).deInit(this.plugin); - this.dataManager.deleteSync(anchor); + this.dataManager.delete(anchor); } /* Anchor access */ diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java index c2c6bf7..265cf5c 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java @@ -4,6 +4,8 @@ import com.craftaro.core.SongodaCore; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.commands.CommandManager; import com.craftaro.core.configuration.Config; +import com.craftaro.core.database.DatabaseConnector; +import com.craftaro.core.database.SQLiteConnector; import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.hooks.HologramManager; @@ -14,8 +16,9 @@ import com.craftaro.epicanchors.commands.sub.GiveCommand; import com.craftaro.epicanchors.commands.sub.ReloadCommand; import com.craftaro.epicanchors.commands.sub.SettingsCommand; import com.craftaro.epicanchors.commands.sub.ShowCommand; +import com.craftaro.epicanchors.files.DataManager; import com.craftaro.epicanchors.files.Settings; -import com.craftaro.epicanchors.files.migration._2_AnchorMigration; +import com.craftaro.epicanchors.files.migration.AnchorMigration; import com.craftaro.epicanchors.files.migration._1_InitialMigration; import com.craftaro.epicanchors.listener.AnchorListener; import com.craftaro.epicanchors.listener.BlockListener; @@ -44,7 +47,15 @@ public final class EpicAnchors extends SongodaPlugin { public void onPluginEnable() { SongodaCore.registerPlugin(this, 31, XMaterial.END_PORTAL_FRAME); - initDatabase(Arrays.asList(new _1_InitialMigration(), new _2_AnchorMigration())); + // Initialize database +// this.getLogger().info("Initializing SQLite..."); +// DatabaseConnector dbCon = new SQLiteConnector(this); +// this.dataManager = new DataManager(dbCon, this); +// AnchorMigration anchorMigration = new AnchorMigration(dbCon, this.dataManager, new _1_InitialMigration()); +// anchorMigration.runMigrations(); +// anchorMigration.migrateLegacyData(this); + + initDatabase(Arrays.asList(new _1_InitialMigration(), new AnchorMigration())); this.anchorManager = new AnchorManagerImpl(this, this.dataManager); EpicAnchorsApi.initApi(this.anchorManager); diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java new file mode 100644 index 0000000..8e196e3 --- /dev/null +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java @@ -0,0 +1,97 @@ +package com.craftaro.epicanchors.files; + +import com.craftaro.core.database.DatabaseConnector; +import com.craftaro.epicanchors.AnchorImpl; +import com.craftaro.epicanchors.api.Anchor; +import com.craftaro.epicanchors.files.migration.AnchorMigration; +import com.craftaro.epicanchors.utils.Callback; +import com.craftaro.epicanchors.utils.UpdateCallback; +import com.craftaro.epicanchors.utils.Utils; +import org.bukkit.Bukkit; +import org.bukkit.Location; +import org.bukkit.World; +import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Objects; +import java.util.UUID; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; + +public class DataManager { + + + +// public void updateAnchors(Collection anchors, UpdateCallback callback) { +// this.databaseConnector.connect((con) -> { +// con.setAutoCommit(false); +// +// SQLException err = null; +// +// for (Anchor anchor : anchors) { +// try (PreparedStatement ps = con.prepareStatement("UPDATE " + this.anchorTable + +// " SET ticks_left =? WHERE id =?;")) { +// ps.setInt(1, anchor.getTicksLeft()); +// ps.setInt(2, anchor.getDbId()); +// +// ps.executeUpdate(); +// } catch (SQLException ex) { +// err = ex; +// break; +// } +// } +// +// if (err == null) { +// con.commit(); +// +// resolveUpdateCallback(callback, null); +// } else { +// con.rollback(); +// +// resolveUpdateCallback(callback, err); +// } +// +// con.setAutoCommit(true); +// }); +// } +// +// public void deleteAnchorAsync(Anchor anchor) { +// deleteAnchorAsync(anchor, null); +// } +// +// public void deleteAnchorAsync(Anchor anchor, UpdateCallback callback) { +// this.thread.execute(() -> +// this.databaseConnector.connect((con) -> { +// try (PreparedStatement ps = con.prepareStatement("DELETE FROM " + this.anchorTable + +// " WHERE id =?;")) { +// ps.setInt(1, anchor.getDbId()); +// +// ps.executeUpdate(); +// +// resolveUpdateCallback(callback, null); +// } catch (Exception ex) { +// resolveUpdateCallback(callback, ex); +// } +// }) +// ); +// } +// +// public static String getTableName(String prefix, String name) { +// String result = prefix + name; +// +// if (!result.matches("[a-z0-9_]+")) { +// throw new IllegalStateException("The generated table name '" + result + "' contains invalid characters"); +// } +// +// return result; +// } +} diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_2_AnchorMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java similarity index 98% rename from EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_2_AnchorMigration.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java index 3b262ae..4d50db1 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_2_AnchorMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java @@ -18,8 +18,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; -public class _2_AnchorMigration extends DataMigration { - public _2_AnchorMigration() { +public class AnchorMigration extends DataMigration { + public AnchorMigration() { super(2); } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java index 3baca8d..250e5fb 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java @@ -1,6 +1,7 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.database.DataMigration; +import com.craftaro.epicanchors.EpicAnchors; import java.sql.Connection; import java.sql.SQLException; @@ -14,14 +15,15 @@ public class _1_InitialMigration extends DataMigration { @Override public void migrate(Connection connection, String tablePrefix) throws SQLException { try (Statement statement = connection.createStatement()) { - statement.execute("CREATE TABLE " + tablePrefix + "anchors (" + - "id INTEGER NOT NULL PRIMARY KEY auto_increment," + + statement.execute("CREATE TABLE " + EpicAnchors.getPlugin(EpicAnchors.class).getDataManager().getTablePrefix() + "anchors (" + + "id INTEGER NOT NULL," + "world_name TEXT NOT NULL," + "x INTEGER NOT NULL," + "y INTEGER NOT NULL," + "z INTEGER NOT NULL," + "ticks_left INTEGER NOT NULL," + - "owner VARCHAR(36)" + + "owner VARCHAR(36)," + + "PRIMARY KEY(id AUTOINCREMENT)" + ");"); } } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java index f718e38..d95eb5b 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java @@ -1,6 +1,8 @@ package com.craftaro.epicanchors.utils; +import com.craftaro.core.database.Data; import com.craftaro.core.database.DataManager; +import com.craftaro.core.third_party.org.jooq.Queries; import com.craftaro.core.third_party.org.jooq.Query; import com.craftaro.core.third_party.org.jooq.Record1; import com.craftaro.core.third_party.org.jooq.Result; @@ -8,13 +10,17 @@ import com.craftaro.core.third_party.org.jooq.impl.DSL; import com.craftaro.epicanchors.AnchorImpl; import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.api.Anchor; -import com.craftaro.epicanchors.files.migration._2_AnchorMigration; +import com.craftaro.epicanchors.files.migration.AnchorMigration; import org.bukkit.World; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; public class DataHelper { @@ -62,7 +68,7 @@ public class DataHelper { } - public static void migrateAnchor(List<_2_AnchorMigration.LegacyAnchorEntry> anchorQueue, UpdateCallback callback) { + public static void migrateAnchor(List anchorQueue, UpdateCallback callback) { DataManager dataManager = EpicAnchors.getPlugin(EpicAnchors.class).getDataManager(); //recreate it with Jooq @@ -71,7 +77,7 @@ public class DataHelper { connection.setAutoCommit(false); try { List queries = new ArrayList<>(); - for (_2_AnchorMigration.LegacyAnchorEntry entry : anchorQueue) { + for (AnchorMigration.LegacyAnchorEntry entry : anchorQueue) { queries.add(dslContext.insertInto(DSL.table(dataManager.getTablePrefix() + "anchors")) .columns( DSL.field("world_name"), From b4c52829903dd2c09ba81186ea73802bc96ce834 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Tue, 24 Oct 2023 01:51:08 +0200 Subject: [PATCH 41/51] Revert "Make database migrations compatible with latest CraftaroCore snapshot" This reverts commit 22c99005ddb1c517ad08e7673361279100b280b0. --- .../epicanchors/files/migration/AnchorMigration.java | 5 ++++- .../epicanchors/files/migration/_1_InitialMigration.java | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java index 4d50db1..2de69ca 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java @@ -3,7 +3,9 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.configuration.Config; import com.craftaro.core.configuration.ConfigSection; import com.craftaro.core.database.DataMigration; +import com.craftaro.core.database.DatabaseConnector; import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.files.DataManager; import com.craftaro.epicanchors.utils.DataHelper; import com.craftaro.epicanchors.utils.ThreadSync; import org.bukkit.Location; @@ -19,12 +21,13 @@ import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; public class AnchorMigration extends DataMigration { + public AnchorMigration() { super(2); } @Override - public void migrate(Connection connection, String tablePrefix) { + public void migrate(DatabaseConnector databaseConnector, String tablePrefix) { Plugin plugin = EpicAnchors.getPlugin(EpicAnchors.class); long start = System.nanoTime(); diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java index 250e5fb..67ba8d0 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java @@ -1,7 +1,9 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.database.DataMigration; +import com.craftaro.core.database.DatabaseConnector; import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.epicanchors.files.DataManager; import java.sql.Connection; import java.sql.SQLException; @@ -13,8 +15,8 @@ public class _1_InitialMigration extends DataMigration { } @Override - public void migrate(Connection connection, String tablePrefix) throws SQLException { - try (Statement statement = connection.createStatement()) { + public void migrate(DatabaseConnector databaseConnector, String tablePrefix) throws SQLException { + try (Statement statement = databaseConnector.getConnection().createStatement()) { statement.execute("CREATE TABLE " + EpicAnchors.getPlugin(EpicAnchors.class).getDataManager().getTablePrefix() + "anchors (" + "id INTEGER NOT NULL," + "world_name TEXT NOT NULL," + From f3377b08f9e904fba26499b21e65aec26b01fedc Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Tue, 24 Oct 2023 01:52:18 +0200 Subject: [PATCH 42/51] Revert "Updates to new database system" This reverts commit f3c8778ad261fb1059995eb981c621a2b4680eea. --- .../com/craftaro/epicanchors/api/Anchor.java | 3 +- .../com/craftaro/epicanchors/AnchorImpl.java | 38 --- .../epicanchors/AnchorManagerImpl.java | 44 +-- .../com/craftaro/epicanchors/EpicAnchors.java | 19 +- .../epicanchors/files/DataManager.java | 306 ++++++++++++++---- .../files/migration/AnchorMigration.java | 21 +- .../files/migration/_1_InitialMigration.java | 8 +- .../epicanchors/listener/AnchorListener.java | 2 +- .../epicanchors/utils/DataHelper.java | 101 ------ 9 files changed, 289 insertions(+), 253 deletions(-) delete mode 100644 EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java diff --git a/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java index e61633c..e7345c0 100644 --- a/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java +++ b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/Anchor.java @@ -1,6 +1,5 @@ package com.craftaro.epicanchors.api; -import com.craftaro.core.database.Data; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.World; @@ -8,7 +7,7 @@ import org.jetbrains.annotations.NotNull; import java.util.UUID; -public interface Anchor extends Data { +public interface Anchor { int getDbId(); UUID getOwner(); diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java index 9a0e521..c63feef 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorImpl.java @@ -1,7 +1,5 @@ package com.craftaro.epicanchors; -import com.craftaro.core.database.Data; -import com.craftaro.core.database.SerializedLocation; import com.craftaro.epicanchors.api.Anchor; import com.craftaro.epicanchors.utils.WorldUtils; import org.bukkit.Bukkit; @@ -12,8 +10,6 @@ import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.LinkedHashMap; -import java.util.Map; import java.util.Objects; import java.util.UUID; @@ -25,15 +21,6 @@ public class AnchorImpl implements Anchor { private final Location location; private int ticksLeft; - /** - * Default constructor for deserialization. - */ - public AnchorImpl() { - dbId = 0; - owner = null; - location = null; - } - public AnchorImpl(int dbId, @Nullable UUID owner, @NotNull Location location, int ticksLeft) { if (dbId <= 0) throw new IllegalArgumentException("Invalid value for dbId"); if (ticksLeft <= 0 && ticksLeft != -1) throw new IllegalArgumentException("Invalid value for ticksLeft"); @@ -150,29 +137,4 @@ public class AnchorImpl implements Anchor { public boolean isInfinite() { return this.ticksLeft == -1; } - - @Override - public Map serialize() { - Map map = new LinkedHashMap<>(); - map.put("id", dbId); - map.putAll(SerializedLocation.of(location)); - map.put("ticks_left", ticksLeft); - map.put("owner", owner == null ? null : owner.toString()); - return map; - } - - @Override - public Data deserialize(Map map) { - return new AnchorImpl( - (int) map.get("id"), - map.get("owner") == null ? null : UUID.fromString((String) map.get("owner")), - SerializedLocation.of(map), - (int) map.get("ticks_left") - ); - } - - @Override - public String getTableName() { - return "anchors"; - } } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java index 3e22153..7c19a56 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java @@ -3,8 +3,6 @@ package com.craftaro.epicanchors; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.compatibility.CompatibleParticleHandler; -import com.craftaro.core.database.Data; -import com.craftaro.core.database.DataManager; import com.craftaro.core.hooks.HologramManager; import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.third_party.com.cryptomorin.xseries.XSound; @@ -14,9 +12,9 @@ import com.craftaro.core.utils.TimeUtils; import com.craftaro.epicanchors.api.Anchor; import com.craftaro.epicanchors.api.AnchorAccessCheck; import com.craftaro.epicanchors.api.AnchorManager; +import com.craftaro.epicanchors.files.DataManager; import com.craftaro.epicanchors.files.Settings; import com.craftaro.epicanchors.utils.Callback; -import com.craftaro.epicanchors.utils.DataHelper; import com.craftaro.epicanchors.utils.UpdateCallback; import com.craftaro.epicanchors.utils.Utils; import org.bukkit.Bukkit; @@ -33,7 +31,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -65,8 +62,7 @@ public class AnchorManagerImpl implements AnchorManager { protected void saveAll() { for (Set anchorSet : this.anchors.values()) { - Collection asData = new ArrayList<>(anchorSet.size()); - this.dataManager.saveBatch(asData); + this.dataManager.updateAnchors(anchorSet, null); } } @@ -87,7 +83,7 @@ public class AnchorManagerImpl implements AnchorManager { long start = System.nanoTime(); - DataHelper.getAnchors(world, (ex, result) -> { + this.dataManager.getAnchors(world, (ex, result) -> { if (ex == null) { this.anchors.computeIfAbsent(world, key -> new HashSet<>()); @@ -118,10 +114,8 @@ public class AnchorManagerImpl implements AnchorManager { protected void deInitAnchors(@NotNull World world) { Set tmpAnchors = this.anchors.remove(world); - if (tmpAnchors != null) { - Collection asData = new ArrayList<>(tmpAnchors.size()); - this.dataManager.saveBatch(asData); + this.dataManager.updateAnchors(tmpAnchors, null); for (Anchor anchor : tmpAnchors) { ((AnchorImpl) anchor).deInit(this.plugin); @@ -235,19 +229,27 @@ public class AnchorManagerImpl implements AnchorManager { throw new IllegalStateException(ERR_WORLD_NOT_READY); } - Anchor anchor = new AnchorImpl(dataManager.getNextId("anchors"), owner, loc, ticks); - this.dataManager.save(anchor); - Bukkit.getScheduler().runTask(this.plugin, () -> { //TODO: Do we need to run this sync, or we are already on the main thread? - Block block = loc.getBlock(); - block.setType(Settings.MATERIAL.getMaterial().parseMaterial()); + this.dataManager.insertAnchorAsync(loc, Objects.requireNonNull(owner), ticks, (ex, anchor) -> { + if (ex != null) { + if (callback != null) { + callback.accept(ex, null); + } else { + Utils.logException(this.plugin, ex, "SQLite"); + } + } else { + Bukkit.getScheduler().runTask(this.plugin, () -> { + Block block = loc.getBlock(); + block.setType(Settings.MATERIAL.getMaterial().parseMaterial()); - this.anchors.computeIfAbsent(anchor.getWorld(), key -> new HashSet<>()) - .add(anchor); + this.anchors.computeIfAbsent(anchor.getWorld(), key -> new HashSet<>()) + .add(anchor); - updateHologram(anchor); + updateHologram(anchor); - if (callback != null) { - callback.accept(null, anchor); + if (callback != null) { + callback.accept(null, anchor); + } + }); } }); } @@ -290,7 +292,7 @@ public class AnchorManagerImpl implements AnchorManager { anchor.getLocation().add(.5, .5, .5), 100, .5, .5, .5); ((AnchorImpl) anchor).deInit(this.plugin); - this.dataManager.delete(anchor); + this.dataManager.deleteAnchorAsync(anchor); } /* Anchor access */ diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java index 265cf5c..154089e 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java @@ -30,7 +30,6 @@ import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.plugin.PluginManager; -import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.logging.Level; @@ -39,6 +38,8 @@ public final class EpicAnchors extends SongodaPlugin { private GuiManager guiManager; private AnchorManagerImpl anchorManager; + private DataManager dataManager; + @Override public void onPluginLoad() { } @@ -48,15 +49,13 @@ public final class EpicAnchors extends SongodaPlugin { SongodaCore.registerPlugin(this, 31, XMaterial.END_PORTAL_FRAME); // Initialize database -// this.getLogger().info("Initializing SQLite..."); -// DatabaseConnector dbCon = new SQLiteConnector(this); -// this.dataManager = new DataManager(dbCon, this); -// AnchorMigration anchorMigration = new AnchorMigration(dbCon, this.dataManager, new _1_InitialMigration()); -// anchorMigration.runMigrations(); -// anchorMigration.migrateLegacyData(this); - - initDatabase(Arrays.asList(new _1_InitialMigration(), new AnchorMigration())); + this.getLogger().info("Initializing SQLite..."); + DatabaseConnector dbCon = new SQLiteConnector(this); + this.dataManager = new DataManager(dbCon, this); + AnchorMigration anchorMigration = new AnchorMigration(dbCon, this.dataManager, new _1_InitialMigration()); + anchorMigration.runMigrations(); + anchorMigration.migrateLegacyData(this); this.anchorManager = new AnchorManagerImpl(this, this.dataManager); EpicAnchorsApi.initApi(this.anchorManager); @@ -101,7 +100,7 @@ public final class EpicAnchors extends SongodaPlugin { if (this.dataManager != null) { this.anchorManager.deInitAll(); - this.dataManager.shutdown(); + this.dataManager.close(); } // Remove all holograms diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java index 8e196e3..1daf7c0 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java @@ -1,5 +1,6 @@ package com.craftaro.epicanchors.files; +import com.craftaro.core.database.DataManagerAbstract; import com.craftaro.core.database.DatabaseConnector; import com.craftaro.epicanchors.AnchorImpl; import com.craftaro.epicanchors.api.Anchor; @@ -27,71 +28,248 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -public class DataManager { +public class DataManager extends DataManagerAbstract { + private final ExecutorService thread = Executors.newSingleThreadExecutor(); + private final String anchorTable; + public DataManager(DatabaseConnector databaseConnector, Plugin plugin) { + super(databaseConnector, plugin); -// public void updateAnchors(Collection anchors, UpdateCallback callback) { -// this.databaseConnector.connect((con) -> { -// con.setAutoCommit(false); -// -// SQLException err = null; -// -// for (Anchor anchor : anchors) { -// try (PreparedStatement ps = con.prepareStatement("UPDATE " + this.anchorTable + -// " SET ticks_left =? WHERE id =?;")) { -// ps.setInt(1, anchor.getTicksLeft()); -// ps.setInt(2, anchor.getDbId()); -// -// ps.executeUpdate(); -// } catch (SQLException ex) { -// err = ex; -// break; -// } -// } -// -// if (err == null) { -// con.commit(); -// -// resolveUpdateCallback(callback, null); -// } else { -// con.rollback(); -// -// resolveUpdateCallback(callback, err); -// } -// -// con.setAutoCommit(true); -// }); -// } -// -// public void deleteAnchorAsync(Anchor anchor) { -// deleteAnchorAsync(anchor, null); -// } -// -// public void deleteAnchorAsync(Anchor anchor, UpdateCallback callback) { -// this.thread.execute(() -> -// this.databaseConnector.connect((con) -> { -// try (PreparedStatement ps = con.prepareStatement("DELETE FROM " + this.anchorTable + -// " WHERE id =?;")) { -// ps.setInt(1, anchor.getDbId()); -// -// ps.executeUpdate(); -// -// resolveUpdateCallback(callback, null); -// } catch (Exception ex) { -// resolveUpdateCallback(callback, ex); -// } -// }) -// ); -// } -// -// public static String getTableName(String prefix, String name) { -// String result = prefix + name; -// -// if (!result.matches("[a-z0-9_]+")) { -// throw new IllegalStateException("The generated table name '" + result + "' contains invalid characters"); -// } -// -// return result; -// } + this.anchorTable = getTableName(super.getTablePrefix(), "anchors"); + } + + public void close() { + if (!this.thread.isShutdown()) { + this.thread.shutdown(); + + try { + if (!this.thread.awaitTermination(60, TimeUnit.SECONDS)) { + // Try stopping the thread forcefully (there is basically no hope left for the data) + this.thread.shutdownNow(); + } + } catch (InterruptedException ex) { + Utils.logException(super.plugin, ex); + } + + this.databaseConnector.closeConnection(); + } + } + + public void exists(@NotNull String worldName, int x, int y, int z, @NotNull Callback callback) { + this.databaseConnector.connect((con) -> { + try (PreparedStatement ps = con.prepareStatement("SELECT id FROM " + this.anchorTable + + " WHERE world_name =? AND x =? AND y =? AND z=?;")) { + ps.setString(1, worldName); + ps.setInt(2, x); + ps.setInt(3, y); + ps.setInt(4, z); + + ResultSet rs = ps.executeQuery(); + + callback.accept(null, rs.next()); + } catch (Exception ex) { + resolveCallback(callback, ex); + } + }); + } + + public void getAnchors(@Nullable World world, @NotNull Callback> callback) { + List result = new ArrayList<>(); + + this.databaseConnector.connect((con) -> { + try (PreparedStatement ps = con.prepareStatement("SELECT * FROM " + this.anchorTable + + (world != null ? " WHERE world_name =?" : "") + ";")) { + if (world != null) { + ps.setString(1, world.getName()); + } + + ResultSet rs = ps.executeQuery(); + + while (rs.next()) { + result.add(extractAnchor(rs)); + } + + callback.accept(null, result); + } catch (Exception ex) { + resolveCallback(callback, ex); + } + }); + } + + public void insertAnchorAsync(Location loc, UUID owner, int ticks, Callback callback) { + this.thread.execute(() -> insertAnchor(loc, owner, ticks, callback)); + } + + public void insertAnchor(Location loc, UUID owner, int ticks, Callback callback) { + this.databaseConnector.connect((con) -> { + try (PreparedStatement ps = con.prepareStatement("INSERT INTO " + this.anchorTable + + "(owner, world_name,x,y,z, ticks_left) VALUES (?,?,?,?,?, ?);");// Future SQLite version might support 'RETURNING *' + PreparedStatement psFetch = con.prepareStatement("SELECT * FROM " + this.anchorTable + + " WHERE world_name =? AND x =? AND y =? AND z=?;")) { + ps.setString(1, owner != null ? owner.toString() : null); + + ps.setString(2, Objects.requireNonNull(loc.getWorld()).getName()); + psFetch.setString(1, Objects.requireNonNull(loc.getWorld()).getName()); + + ps.setInt(3, loc.getBlockX()); + psFetch.setInt(2, loc.getBlockX()); + + ps.setInt(4, loc.getBlockY()); + psFetch.setInt(3, loc.getBlockY()); + + ps.setInt(5, loc.getBlockZ()); + psFetch.setInt(4, loc.getBlockZ()); + + ps.setInt(6, ticks); + + ps.executeUpdate(); + + if (callback != null) { + ResultSet rs = psFetch.executeQuery(); + rs.next(); + + callback.accept(null, extractAnchor(rs)); + } + } catch (Exception ex) { + resolveCallback(callback, ex); + } + }); + } + + public void migrateAnchor(List anchorEntries, UpdateCallback callback) { + this.databaseConnector.connect((con) -> { + con.setAutoCommit(false); + + SQLException err = null; + + try (PreparedStatement ps = con.prepareStatement("INSERT INTO " + this.anchorTable + + "(world_name,x,y,z, ticks_left) VALUES (?,?,?,?, ?);")) { + for (AnchorMigration.LegacyAnchorEntry entry : anchorEntries) { + ps.setString(1, entry.worldName); + ps.setInt(2, entry.x); + ps.setInt(3, entry.y); + ps.setInt(4, entry.z); + + ps.setInt(5, entry.ticksLeft); + + ps.addBatch(); + } + + int[] batchRes = ps.executeBatch(); + + for (int i : batchRes) { + if (i < 0 && i != Statement.SUCCESS_NO_INFO) { + throw new AssertionError("Batch-INSERT failed for at least one statement with code " + i); + } + } + } catch (SQLException ex) { + err = ex; + } + + if (err == null) { + con.commit(); + + resolveUpdateCallback(callback, null); + } else { + con.rollback(); + + resolveUpdateCallback(callback, err); + } + + con.setAutoCommit(true); + }); + } + + public void updateAnchors(Collection anchors, UpdateCallback callback) { + this.databaseConnector.connect((con) -> { + con.setAutoCommit(false); + + SQLException err = null; + + for (Anchor anchor : anchors) { + try (PreparedStatement ps = con.prepareStatement("UPDATE " + this.anchorTable + + " SET ticks_left =? WHERE id =?;")) { + ps.setInt(1, anchor.getTicksLeft()); + ps.setInt(2, anchor.getDbId()); + + ps.executeUpdate(); + } catch (SQLException ex) { + err = ex; + break; + } + } + + if (err == null) { + con.commit(); + + resolveUpdateCallback(callback, null); + } else { + con.rollback(); + + resolveUpdateCallback(callback, err); + } + + con.setAutoCommit(true); + }); + } + + public void deleteAnchorAsync(Anchor anchor) { + deleteAnchorAsync(anchor, null); + } + + public void deleteAnchorAsync(Anchor anchor, UpdateCallback callback) { + this.thread.execute(() -> + this.databaseConnector.connect((con) -> { + try (PreparedStatement ps = con.prepareStatement("DELETE FROM " + this.anchorTable + + " WHERE id =?;")) { + ps.setInt(1, anchor.getDbId()); + + ps.executeUpdate(); + + resolveUpdateCallback(callback, null); + } catch (Exception ex) { + resolveUpdateCallback(callback, ex); + } + }) + ); + } + + public static String getTableName(String prefix, String name) { + String result = prefix + name; + + if (!result.matches("[a-z0-9_]+")) { + throw new IllegalStateException("The generated table name '" + result + "' contains invalid characters"); + } + + return result; + } + + private Anchor extractAnchor(ResultSet rs) throws SQLException { + String ownerStr = rs.getString("owner"); + + return new AnchorImpl(rs.getInt("id"), + ownerStr != null ? UUID.fromString(ownerStr) : null, + new Location(Bukkit.getWorld(rs.getString("world_name")), + rs.getInt("x"), + rs.getInt("y"), + rs.getInt("z")), + rs.getInt("ticks_left")); + } + + private void resolveUpdateCallback(@Nullable UpdateCallback callback, @Nullable Exception ex) { + if (callback != null) { + callback.accept(ex); + } else if (ex != null) { + Utils.logException(this.plugin, ex, "SQLite"); + } + } + + private void resolveCallback(@Nullable Callback callback, @NotNull Exception ex) { + if (callback != null) { + callback.accept(ex, null); + } else { + Utils.logException(this.plugin, ex, "SQLite"); + } + } } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java index 2de69ca..ed9483a 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java @@ -3,32 +3,31 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.configuration.Config; import com.craftaro.core.configuration.ConfigSection; import com.craftaro.core.database.DataMigration; +import com.craftaro.core.database.DataMigrationManager; import com.craftaro.core.database.DatabaseConnector; -import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.files.DataManager; -import com.craftaro.epicanchors.utils.DataHelper; import com.craftaro.epicanchors.utils.ThreadSync; import org.bukkit.Location; import org.bukkit.plugin.Plugin; import java.io.IOException; import java.nio.file.Files; -import java.sql.Connection; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; -public class AnchorMigration extends DataMigration { +public class AnchorMigration extends DataMigrationManager { + private final DataManager dataManager; - public AnchorMigration() { - super(2); + public AnchorMigration(DatabaseConnector databaseConnector, DataManager dataManager, DataMigration... migrations) { + super(databaseConnector, dataManager, migrations); + + this.dataManager = dataManager; } - @Override - public void migrate(DatabaseConnector databaseConnector, String tablePrefix) { - Plugin plugin = EpicAnchors.getPlugin(EpicAnchors.class); + public void migrateLegacyData(Plugin plugin) { long start = System.nanoTime(); AtomicBoolean abortMigration = new AtomicBoolean(false); @@ -68,7 +67,7 @@ public class AnchorMigration extends DataMigration { int z = Location.locToBlock(Double.parseDouble(locArgs[3])); int finalTicksLeft = ticksLeft; - DataHelper.exists(worldName, x, y, z, (ex, anchorExists) -> { + this.dataManager.exists(worldName, x, y, z, (ex, anchorExists) -> { if (ex == null) { if (anchorExists) { cfgSection.set(locationStr, null); @@ -95,7 +94,7 @@ public class AnchorMigration extends DataMigration { if (!abortMigration.get()) { int finalMigratedAnchors = migratedAnchors; - DataHelper.migrateAnchor(anchorQueue, ex -> { + this.dataManager.migrateAnchor(anchorQueue, ex -> { long end = System.nanoTime(); if (ex == null) { diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java index 67ba8d0..ac135f1 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java @@ -1,8 +1,6 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.database.DataMigration; -import com.craftaro.core.database.DatabaseConnector; -import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.files.DataManager; import java.sql.Connection; @@ -15,9 +13,9 @@ public class _1_InitialMigration extends DataMigration { } @Override - public void migrate(DatabaseConnector databaseConnector, String tablePrefix) throws SQLException { - try (Statement statement = databaseConnector.getConnection().createStatement()) { - statement.execute("CREATE TABLE " + EpicAnchors.getPlugin(EpicAnchors.class).getDataManager().getTablePrefix() + "anchors (" + + public void migrate(Connection connection, String tablePrefix) throws SQLException { + try (Statement statement = connection.createStatement()) { + statement.execute("CREATE TABLE " + DataManager.getTableName(tablePrefix, "anchors") + "(" + "id INTEGER NOT NULL," + "world_name TEXT NOT NULL," + "x INTEGER NOT NULL," + diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java index 0c47201..58a2ce6 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java @@ -49,7 +49,7 @@ public class AnchorListener implements Listener { this.plugin.getAnchorManager().createAnchor(e.getBlock().getLocation(), e.getPlayer().getUniqueId(), ticksLeft, (ex, result) -> { if (ex != null) { - Utils.logException(this.plugin, ex, "SQL"); + Utils.logException(this.plugin, ex, "SQLite"); e.getPlayer().sendMessage("Error creating anchor!"); // TODO Bukkit.getScheduler().runTask(this.plugin, () -> { diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java deleted file mode 100644 index d95eb5b..0000000 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/utils/DataHelper.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.craftaro.epicanchors.utils; - -import com.craftaro.core.database.Data; -import com.craftaro.core.database.DataManager; -import com.craftaro.core.third_party.org.jooq.Queries; -import com.craftaro.core.third_party.org.jooq.Query; -import com.craftaro.core.third_party.org.jooq.Record1; -import com.craftaro.core.third_party.org.jooq.Result; -import com.craftaro.core.third_party.org.jooq.impl.DSL; -import com.craftaro.epicanchors.AnchorImpl; -import com.craftaro.epicanchors.EpicAnchors; -import com.craftaro.epicanchors.api.Anchor; -import com.craftaro.epicanchors.files.migration.AnchorMigration; -import org.bukkit.World; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; - -public class DataHelper { - - public static void exists(@NotNull String worldName, int x, int y, int z, @NotNull Callback callback) { - DataManager dataManager = EpicAnchors.getPlugin(EpicAnchors.class).getDataManager(); - - dataManager.getDatabaseConnector().connectDSL(dslContext -> { - try { - @NotNull Result> result = dslContext.select(DSL.field("id")).from(DSL.table(dataManager.getTablePrefix() + "anchors")) - .where(DSL.field("world_name").eq(worldName)) - .and(DSL.field("x").eq(x)) - .and(DSL.field("y").eq(y)) - .and(DSL.field("z").eq(z)).fetch(); - - callback.accept(null, result.size() > 0); - } catch (Exception ex) { - resolveCallback(callback, ex); - } - }); - } - - public static void getAnchors(@Nullable World world, @NotNull Callback> callback) { - try { - callback.accept(null, EpicAnchors.getPlugin(EpicAnchors.class).getDataManager().loadBatch(AnchorImpl.class, "anchors")); - } catch (Exception ex) { - resolveCallback(callback, ex); - } - } - - private static void resolveUpdateCallback(@Nullable UpdateCallback callback, @Nullable Exception ex) { - if (callback != null) { - callback.accept(ex); - } else if (ex != null) { - Utils.logException(EpicAnchors.getPlugin(EpicAnchors.class), ex, "SQL"); - } - } - - private static void resolveCallback(@Nullable Callback callback, @NotNull Exception ex) { - if (callback != null) { - callback.accept(ex, null); - } else { - Utils.logException(EpicAnchors.getPlugin(EpicAnchors.class), ex, "SQL"); - } - } - - - public static void migrateAnchor(List anchorQueue, UpdateCallback callback) { - DataManager dataManager = EpicAnchors.getPlugin(EpicAnchors.class).getDataManager(); - - //recreate it with Jooq - dataManager.getDatabaseConnector().connectDSL(dslContext -> { - Connection connection = dslContext.configuration().connectionProvider().acquire(); - connection.setAutoCommit(false); - try { - List queries = new ArrayList<>(); - for (AnchorMigration.LegacyAnchorEntry entry : anchorQueue) { - queries.add(dslContext.insertInto(DSL.table(dataManager.getTablePrefix() + "anchors")) - .columns( - DSL.field("world_name"), - DSL.field("x"), - DSL.field("y"), - DSL.field("z"), - DSL.field("ticks_left")) - .values(entry.worldName, entry.x, entry.y, entry.z, entry.ticksLeft)); - } - dslContext.batch(queries).execute(); - connection.commit(); - } catch (Exception ex) { - connection.rollback(); - resolveUpdateCallback(callback, ex); - } finally { - connection.setAutoCommit(true); - dslContext.configuration().connectionProvider().release(connection); - } - }); - } -} From 95b128d73dc9ef1778d3c093b70d66401b126bb0 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Tue, 24 Oct 2023 03:00:27 +0200 Subject: [PATCH 43/51] fix: Properly migrate the database related code to the new core's API See previously commits for context tl;dr The database migration introduced a lot of changed behaviour and breaking changes. The plugin essentially could never have worked and nobody reported the issue (or tested it). I've completely redone the code migration, keeping changes for the plugin internals to a minimum. Hopefully I didn't overlook anything... --- EpicAnchors-Plugin/pom.xml | 1 + .../epicanchors/AnchorManagerImpl.java | 10 +- .../com/craftaro/epicanchors/EpicAnchors.java | 31 +++--- ...taManager.java => AnchorsDataManager.java} | 99 +++++++++---------- ...on.java => LegacyYamlAnchorsMigrator.java} | 23 ++--- .../files/migration/_1_InitialMigration.java | 23 ++--- .../epicanchors/listener/AnchorListener.java | 2 +- 7 files changed, 90 insertions(+), 99 deletions(-) rename EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/{DataManager.java => AnchorsDataManager.java} (72%) rename EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/{AnchorMigration.java => LegacyYamlAnchorsMigrator.java} (85%) diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 1d44dfc..e7c07dd 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -56,6 +56,7 @@ false **/nms/v*/** + **/core/third_party/org/h2/** diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java index 7c19a56..94f69b4 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java @@ -12,7 +12,7 @@ import com.craftaro.core.utils.TimeUtils; import com.craftaro.epicanchors.api.Anchor; import com.craftaro.epicanchors.api.AnchorAccessCheck; import com.craftaro.epicanchors.api.AnchorManager; -import com.craftaro.epicanchors.files.DataManager; +import com.craftaro.epicanchors.files.AnchorsDataManager; import com.craftaro.epicanchors.files.Settings; import com.craftaro.epicanchors.utils.Callback; import com.craftaro.epicanchors.utils.UpdateCallback; @@ -47,7 +47,7 @@ public class AnchorManagerImpl implements AnchorManager { private static final String HOLOGRAM_PREFIX = "Anchor_"; private final SongodaPlugin plugin; - private final DataManager dataManager; + private final AnchorsDataManager dataManager; private final Map> anchors = new HashMap<>(3); private final Set visualizedChunk = new HashSet<>(); @@ -55,7 +55,7 @@ public class AnchorManagerImpl implements AnchorManager { private boolean ready; - public AnchorManagerImpl(SongodaPlugin plugin, DataManager dataManager) { + public AnchorManagerImpl(SongodaPlugin plugin, AnchorsDataManager dataManager) { this.plugin = Objects.requireNonNull(plugin); this.dataManager = Objects.requireNonNull(dataManager); } @@ -105,7 +105,7 @@ public class AnchorManagerImpl implements AnchorManager { if (callback != null) { callback.accept(ex); } else { - Utils.logException(this.plugin, ex, "SQLite"); + Utils.logException(this.plugin, ex, "H2"); } } }); @@ -234,7 +234,7 @@ public class AnchorManagerImpl implements AnchorManager { if (callback != null) { callback.accept(ex, null); } else { - Utils.logException(this.plugin, ex, "SQLite"); + Utils.logException(this.plugin, ex, "H2"); } } else { Bukkit.getScheduler().runTask(this.plugin, () -> { diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java index 154089e..88df5a2 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java @@ -4,8 +4,6 @@ import com.craftaro.core.SongodaCore; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.commands.CommandManager; import com.craftaro.core.configuration.Config; -import com.craftaro.core.database.DatabaseConnector; -import com.craftaro.core.database.SQLiteConnector; import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.hooks.HologramManager; @@ -16,9 +14,9 @@ import com.craftaro.epicanchors.commands.sub.GiveCommand; import com.craftaro.epicanchors.commands.sub.ReloadCommand; import com.craftaro.epicanchors.commands.sub.SettingsCommand; import com.craftaro.epicanchors.commands.sub.ShowCommand; -import com.craftaro.epicanchors.files.DataManager; +import com.craftaro.epicanchors.files.AnchorsDataManager; import com.craftaro.epicanchors.files.Settings; -import com.craftaro.epicanchors.files.migration.AnchorMigration; +import com.craftaro.epicanchors.files.migration.LegacyYamlAnchorsMigrator; import com.craftaro.epicanchors.files.migration._1_InitialMigration; import com.craftaro.epicanchors.listener.AnchorListener; import com.craftaro.epicanchors.listener.BlockListener; @@ -38,7 +36,7 @@ public final class EpicAnchors extends SongodaPlugin { private GuiManager guiManager; private AnchorManagerImpl anchorManager; - private DataManager dataManager; + private AnchorsDataManager dataManager; @Override public void onPluginLoad() { @@ -48,14 +46,8 @@ public final class EpicAnchors extends SongodaPlugin { public void onPluginEnable() { SongodaCore.registerPlugin(this, 31, XMaterial.END_PORTAL_FRAME); - // Initialize database - this.getLogger().info("Initializing SQLite..."); - DatabaseConnector dbCon = new SQLiteConnector(this); - this.dataManager = new DataManager(dbCon, this); - AnchorMigration anchorMigration = new AnchorMigration(dbCon, this.dataManager, new _1_InitialMigration()); - anchorMigration.runMigrations(); + initializeDataManager(); - anchorMigration.migrateLegacyData(this); this.anchorManager = new AnchorManagerImpl(this, this.dataManager); EpicAnchorsApi.initApi(this.anchorManager); @@ -150,4 +142,19 @@ public final class EpicAnchors extends SongodaPlugin { public AnchorManager getAnchorManager() { return this.anchorManager; } + + @Override + public Config getDatabaseConfig() { + Config staticDatabaseConfig = new Config(); + staticDatabaseConfig.set("Connection Settings.Type", "H2"); + staticDatabaseConfig.set("Connection Settings.Pool Size", 1); + return staticDatabaseConfig; + } + + private void initializeDataManager() { + super.initDatabase(new _1_InitialMigration()); + + this.dataManager = new AnchorsDataManager(this); + LegacyYamlAnchorsMigrator.migrateLegacyData(this, this.dataManager); + } } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/AnchorsDataManager.java similarity index 72% rename from EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/AnchorsDataManager.java index 1daf7c0..999c595 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/DataManager.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/AnchorsDataManager.java @@ -1,17 +1,16 @@ package com.craftaro.epicanchors.files; -import com.craftaro.core.database.DataManagerAbstract; +import com.craftaro.core.SongodaPlugin; import com.craftaro.core.database.DatabaseConnector; import com.craftaro.epicanchors.AnchorImpl; import com.craftaro.epicanchors.api.Anchor; -import com.craftaro.epicanchors.files.migration.AnchorMigration; +import com.craftaro.epicanchors.files.migration.LegacyYamlAnchorsMigrator; import com.craftaro.epicanchors.utils.Callback; import com.craftaro.epicanchors.utils.UpdateCallback; import com.craftaro.epicanchors.utils.Utils; import org.bukkit.Bukkit; import org.bukkit.Location; import org.bukkit.World; -import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -28,38 +27,35 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; -public class DataManager extends DataManagerAbstract { +public class AnchorsDataManager { private final ExecutorService thread = Executors.newSingleThreadExecutor(); + private final SongodaPlugin plugin; - private final String anchorTable; - - public DataManager(DatabaseConnector databaseConnector, Plugin plugin) { - super(databaseConnector, plugin); - - this.anchorTable = getTableName(super.getTablePrefix(), "anchors"); + public AnchorsDataManager(SongodaPlugin plugin) { + this.plugin = plugin; } public void close() { - if (!this.thread.isShutdown()) { - this.thread.shutdown(); - - try { - if (!this.thread.awaitTermination(60, TimeUnit.SECONDS)) { - // Try stopping the thread forcefully (there is basically no hope left for the data) - this.thread.shutdownNow(); - } - } catch (InterruptedException ex) { - Utils.logException(super.plugin, ex); - } - - this.databaseConnector.closeConnection(); + if (this.thread.isShutdown()) { + return; } + + this.thread.shutdown(); + try { + if (!this.thread.awaitTermination(60, TimeUnit.SECONDS)) { + // Try stopping the thread forcefully (there is basically no hope left for the data) + this.thread.shutdownNow(); + } + } catch (InterruptedException ex) { + Utils.logException(this.plugin, ex); + } + + this.plugin.getDataManager().shutdown(); } public void exists(@NotNull String worldName, int x, int y, int z, @NotNull Callback callback) { - this.databaseConnector.connect((con) -> { - try (PreparedStatement ps = con.prepareStatement("SELECT id FROM " + this.anchorTable + - " WHERE world_name =? AND x =? AND y =? AND z=?;")) { + getDatabaseConnector().connect((con) -> { + try (PreparedStatement ps = con.prepareStatement("SELECT id FROM " + getAnchorTable() + " WHERE world_name =? AND x =? AND y =? AND z=?;")) { ps.setString(1, worldName); ps.setInt(2, x); ps.setInt(3, y); @@ -77,9 +73,8 @@ public class DataManager extends DataManagerAbstract { public void getAnchors(@Nullable World world, @NotNull Callback> callback) { List result = new ArrayList<>(); - this.databaseConnector.connect((con) -> { - try (PreparedStatement ps = con.prepareStatement("SELECT * FROM " + this.anchorTable + - (world != null ? " WHERE world_name =?" : "") + ";")) { + getDatabaseConnector().connect((con) -> { + try (PreparedStatement ps = con.prepareStatement("SELECT * FROM " + getAnchorTable() + (world != null ? " WHERE world_name =?" : "") + ";")) { if (world != null) { ps.setString(1, world.getName()); } @@ -102,11 +97,10 @@ public class DataManager extends DataManagerAbstract { } public void insertAnchor(Location loc, UUID owner, int ticks, Callback callback) { - this.databaseConnector.connect((con) -> { - try (PreparedStatement ps = con.prepareStatement("INSERT INTO " + this.anchorTable + - "(owner, world_name,x,y,z, ticks_left) VALUES (?,?,?,?,?, ?);");// Future SQLite version might support 'RETURNING *' - PreparedStatement psFetch = con.prepareStatement("SELECT * FROM " + this.anchorTable + - " WHERE world_name =? AND x =? AND y =? AND z=?;")) { + getDatabaseConnector().connect((con) -> { + try (PreparedStatement ps = con.prepareStatement("INSERT INTO " + getAnchorTable() + "(owner, world_name,x,y,z, ticks_left) VALUES (?,?,?,?,?, ?);"); // Future SQLite version might support 'RETURNING *' + PreparedStatement psFetch = con.prepareStatement("SELECT * FROM " + getAnchorTable() + " WHERE world_name =? AND x =? AND y =? AND z=?;") + ) { ps.setString(1, owner != null ? owner.toString() : null); ps.setString(2, Objects.requireNonNull(loc.getWorld()).getName()); @@ -137,15 +131,14 @@ public class DataManager extends DataManagerAbstract { }); } - public void migrateAnchor(List anchorEntries, UpdateCallback callback) { - this.databaseConnector.connect((con) -> { + public void migrateAnchor(List anchorEntries, UpdateCallback callback) { + getDatabaseConnector().connect((con) -> { con.setAutoCommit(false); SQLException err = null; - try (PreparedStatement ps = con.prepareStatement("INSERT INTO " + this.anchorTable + - "(world_name,x,y,z, ticks_left) VALUES (?,?,?,?, ?);")) { - for (AnchorMigration.LegacyAnchorEntry entry : anchorEntries) { + try (PreparedStatement ps = con.prepareStatement("INSERT INTO " + getAnchorTable() + "(world_name,x,y,z, ticks_left) VALUES (?,?,?,?, ?);")) { + for (LegacyYamlAnchorsMigrator.LegacyAnchorEntry entry : anchorEntries) { ps.setString(1, entry.worldName); ps.setInt(2, entry.x); ps.setInt(3, entry.y); @@ -182,14 +175,13 @@ public class DataManager extends DataManagerAbstract { } public void updateAnchors(Collection anchors, UpdateCallback callback) { - this.databaseConnector.connect((con) -> { + getDatabaseConnector().connect((con) -> { con.setAutoCommit(false); SQLException err = null; for (Anchor anchor : anchors) { - try (PreparedStatement ps = con.prepareStatement("UPDATE " + this.anchorTable + - " SET ticks_left =? WHERE id =?;")) { + try (PreparedStatement ps = con.prepareStatement("UPDATE " + getAnchorTable() + " SET ticks_left =? WHERE id =?;")) { ps.setInt(1, anchor.getTicksLeft()); ps.setInt(2, anchor.getDbId()); @@ -220,9 +212,8 @@ public class DataManager extends DataManagerAbstract { public void deleteAnchorAsync(Anchor anchor, UpdateCallback callback) { this.thread.execute(() -> - this.databaseConnector.connect((con) -> { - try (PreparedStatement ps = con.prepareStatement("DELETE FROM " + this.anchorTable + - " WHERE id =?;")) { + getDatabaseConnector().connect((con) -> { + try (PreparedStatement ps = con.prepareStatement("DELETE FROM " + getAnchorTable() + " WHERE id =?;")) { ps.setInt(1, anchor.getDbId()); ps.executeUpdate(); @@ -235,14 +226,16 @@ public class DataManager extends DataManagerAbstract { ); } - public static String getTableName(String prefix, String name) { - String result = prefix + name; + public String getAnchorTable() { + return getAnchorTable(this.plugin.getDataManager().getTablePrefix()); + } - if (!result.matches("[a-z0-9_]+")) { - throw new IllegalStateException("The generated table name '" + result + "' contains invalid characters"); - } + public static String getAnchorTable(String prefix) { + return prefix + "anchors"; + } - return result; + private DatabaseConnector getDatabaseConnector() { + return this.plugin.getDataManager().getDatabaseConnector(); } private Anchor extractAnchor(ResultSet rs) throws SQLException { @@ -261,7 +254,7 @@ public class DataManager extends DataManagerAbstract { if (callback != null) { callback.accept(ex); } else if (ex != null) { - Utils.logException(this.plugin, ex, "SQLite"); + Utils.logException(this.plugin, ex, "H2"); } } @@ -269,7 +262,7 @@ public class DataManager extends DataManagerAbstract { if (callback != null) { callback.accept(ex, null); } else { - Utils.logException(this.plugin, ex, "SQLite"); + Utils.logException(this.plugin, ex, "H2"); } } } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/LegacyYamlAnchorsMigrator.java similarity index 85% rename from EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java rename to EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/LegacyYamlAnchorsMigrator.java index ed9483a..48b9df6 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/AnchorMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/LegacyYamlAnchorsMigrator.java @@ -2,10 +2,7 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.configuration.Config; import com.craftaro.core.configuration.ConfigSection; -import com.craftaro.core.database.DataMigration; -import com.craftaro.core.database.DataMigrationManager; -import com.craftaro.core.database.DatabaseConnector; -import com.craftaro.epicanchors.files.DataManager; +import com.craftaro.epicanchors.files.AnchorsDataManager; import com.craftaro.epicanchors.utils.ThreadSync; import org.bukkit.Location; import org.bukkit.plugin.Plugin; @@ -18,16 +15,8 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; -public class AnchorMigration extends DataMigrationManager { - private final DataManager dataManager; - - public AnchorMigration(DatabaseConnector databaseConnector, DataManager dataManager, DataMigration... migrations) { - super(databaseConnector, dataManager, migrations); - - this.dataManager = dataManager; - } - - public void migrateLegacyData(Plugin plugin) { +public class LegacyYamlAnchorsMigrator { + public static void migrateLegacyData(Plugin plugin, AnchorsDataManager dataManager) { long start = System.nanoTime(); AtomicBoolean abortMigration = new AtomicBoolean(false); @@ -67,7 +56,7 @@ public class AnchorMigration extends DataMigrationManager { int z = Location.locToBlock(Double.parseDouble(locArgs[3])); int finalTicksLeft = ticksLeft; - this.dataManager.exists(worldName, x, y, z, (ex, anchorExists) -> { + dataManager.exists(worldName, x, y, z, (ex, anchorExists) -> { if (ex == null) { if (anchorExists) { cfgSection.set(locationStr, null); @@ -94,7 +83,7 @@ public class AnchorMigration extends DataMigrationManager { if (!abortMigration.get()) { int finalMigratedAnchors = migratedAnchors; - this.dataManager.migrateAnchor(anchorQueue, ex -> { + dataManager.migrateAnchor(anchorQueue, ex -> { long end = System.nanoTime(); if (ex == null) { @@ -114,7 +103,7 @@ public class AnchorMigration extends DataMigrationManager { } } - private String[] deserializeLegacyLocation(String str) { + private static String[] deserializeLegacyLocation(String str) { if (str == null || str.isEmpty()) { return new String[0]; } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java index ac135f1..f260e66 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/migration/_1_InitialMigration.java @@ -1,7 +1,7 @@ package com.craftaro.epicanchors.files.migration; import com.craftaro.core.database.DataMigration; -import com.craftaro.epicanchors.files.DataManager; +import com.craftaro.epicanchors.files.AnchorsDataManager; import java.sql.Connection; import java.sql.SQLException; @@ -15,16 +15,17 @@ public class _1_InitialMigration extends DataMigration { @Override public void migrate(Connection connection, String tablePrefix) throws SQLException { try (Statement statement = connection.createStatement()) { - statement.execute("CREATE TABLE " + DataManager.getTableName(tablePrefix, "anchors") + "(" + - "id INTEGER NOT NULL," + - "world_name TEXT NOT NULL," + - "x INTEGER NOT NULL," + - "y INTEGER NOT NULL," + - "z INTEGER NOT NULL," + - "ticks_left INTEGER NOT NULL," + - "owner VARCHAR(36)," + - "PRIMARY KEY(id AUTOINCREMENT)" + - ");"); + statement.execute( + "CREATE TABLE " + AnchorsDataManager.getAnchorTable(tablePrefix) + + "(" + + "id INTEGER NOT NULL PRIMARY KEY auto_increment," + + "world_name TEXT NOT NULL," + + "x INTEGER NOT NULL," + + "y INTEGER NOT NULL," + + "z INTEGER NOT NULL," + + "ticks_left INTEGER NOT NULL," + + "owner VARCHAR(36)" + + ");"); } } } diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java index 58a2ce6..f1776f0 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java @@ -49,7 +49,7 @@ public class AnchorListener implements Listener { this.plugin.getAnchorManager().createAnchor(e.getBlock().getLocation(), e.getPlayer().getUniqueId(), ticksLeft, (ex, result) -> { if (ex != null) { - Utils.logException(this.plugin, ex, "SQLite"); + Utils.logException(this.plugin, ex, "H2"); e.getPlayer().sendMessage("Error creating anchor!"); // TODO Bukkit.getScheduler().runTask(this.plugin, () -> { From 829e97e5e27d159ae86cdf6dfbb01f0f14636f35 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Tue, 24 Oct 2023 03:01:51 +0200 Subject: [PATCH 44/51] Release v3.0.0-b3-SNAPSHOT --- EpicAnchors-API/pom.xml | 2 +- EpicAnchors-Plugin/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index fdd952e..3528d44 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 3.0.0-b2-SNAPSHOT + 3.0.0-b3-SNAPSHOT ../pom.xml EpicAnchors-API diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index e7c07dd..82890ed 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 3.0.0-b2-SNAPSHOT + 3.0.0-b3-SNAPSHOT ../pom.xml EpicAnchors-Plugin diff --git a/pom.xml b/pom.xml index 530c881..580b1c5 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent pom - 3.0.0-b2-SNAPSHOT + 3.0.0-b3-SNAPSHOT From e5b48b624fa5babbc753dd04ea9b0c1999d9cda5 Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 13 Jan 2024 21:13:59 +0100 Subject: [PATCH 45/51] Upgrade Craftaro Core (+dynamic library loading; +MC 1.20.4 support) Notable changes: * Spigot 1.20.3/3 compatibility * dynamic library/dependency loading * Smaller plugin jar size --- .../com/craftaro/epicanchors/api/AnchorManager.java | 2 +- EpicAnchors-Plugin/pom.xml | 12 +++++++++++- .../com/craftaro/epicanchors/AnchorManagerImpl.java | 4 ++-- .../java/com/craftaro/epicanchors/EpicAnchors.java | 3 ++- .../com/craftaro/epicanchors/files/Settings.java | 2 +- .../com/craftaro/epicanchors/guis/AnchorGui.java | 4 ++-- .../epicanchors/guis/DestroyConfirmationGui.java | 2 +- .../epicanchors/listener/AnchorListener.java | 2 +- 8 files changed, 21 insertions(+), 10 deletions(-) diff --git a/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorManager.java b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorManager.java index 265720c..19e7c24 100644 --- a/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorManager.java +++ b/EpicAnchors-API/src/main/java/com/craftaro/epicanchors/api/AnchorManager.java @@ -1,7 +1,7 @@ package com.craftaro.epicanchors.api; -import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.epicanchors.utils.Callback; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import org.bukkit.Chunk; import org.bukkit.Location; import org.bukkit.Material; diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 82890ed..3164bdb 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -56,8 +56,18 @@ false **/nms/v*/** - **/core/third_party/org/h2/** + + **/third_party/org/apache/** + **/third_party/net/kyori/** + **/third_party/com/zaxxer/** + **/third_party/org/jooq/** + **/third_party/org/mariadb/** + **/third_party/com/h2database/** + **/third_party/org/h2/** + **/third_party/com/cryptomorin/** + **/third_party/org/reactivestreams/** + diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java index 94f69b4..6b10c2f 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/AnchorManagerImpl.java @@ -4,8 +4,6 @@ import com.craftaro.core.SongodaPlugin; import com.craftaro.core.compatibility.CompatibleMaterial; import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.hooks.HologramManager; -import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; -import com.craftaro.core.third_party.com.cryptomorin.xseries.XSound; import com.craftaro.core.third_party.de.tr7zw.nbtapi.NBTItem; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; @@ -17,6 +15,8 @@ import com.craftaro.epicanchors.files.Settings; import com.craftaro.epicanchors.utils.Callback; import com.craftaro.epicanchors.utils.UpdateCallback; import com.craftaro.epicanchors.utils.Utils; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; +import com.craftaro.third_party.com.cryptomorin.xseries.XSound; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.Location; diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java index 88df5a2..bbb58ee 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/EpicAnchors.java @@ -4,10 +4,10 @@ import com.craftaro.core.SongodaCore; import com.craftaro.core.SongodaPlugin; import com.craftaro.core.commands.CommandManager; import com.craftaro.core.configuration.Config; +import com.craftaro.core.dependency.Dependency; import com.craftaro.core.gui.GuiManager; import com.craftaro.core.hooks.EconomyManager; import com.craftaro.core.hooks.HologramManager; -import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.epicanchors.api.AnchorManager; import com.craftaro.epicanchors.commands.EpicAnchorsCommand; import com.craftaro.epicanchors.commands.sub.GiveCommand; @@ -24,6 +24,7 @@ import com.craftaro.epicanchors.listener.WorldListener; import com.craftaro.epicanchors.tasks.AnchorTask; import com.craftaro.epicanchors.tasks.VisualizeTask; import com.craftaro.epicanchors.utils.ThreadSync; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import org.bukkit.Bukkit; import org.bukkit.World; import org.bukkit.plugin.PluginManager; diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java index 9e47c3b..168a995 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/files/Settings.java @@ -5,8 +5,8 @@ import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.configuration.Config; import com.craftaro.core.configuration.ConfigSetting; import com.craftaro.core.hooks.EconomyManager; -import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.epicanchors.EpicAnchors; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; import org.bukkit.plugin.java.JavaPlugin; public class Settings { diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java index dfaf051..878dee9 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/AnchorGui.java @@ -4,13 +4,13 @@ import com.craftaro.core.compatibility.CompatibleParticleHandler; import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.hooks.EconomyManager; -import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; -import com.craftaro.core.third_party.com.cryptomorin.xseries.XSound; import com.craftaro.core.utils.TextUtils; import com.craftaro.core.utils.TimeUtils; import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.api.Anchor; import com.craftaro.epicanchors.files.Settings; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; +import com.craftaro.third_party.com.cryptomorin.xseries.XSound; import org.bukkit.Bukkit; import org.bukkit.ChatColor; import org.bukkit.GameMode; diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/DestroyConfirmationGui.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/DestroyConfirmationGui.java index d8e473a..f987fe1 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/DestroyConfirmationGui.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/guis/DestroyConfirmationGui.java @@ -3,12 +3,12 @@ package com.craftaro.epicanchors.guis; import com.craftaro.core.gui.Gui; import com.craftaro.core.gui.GuiUtils; import com.craftaro.core.gui.methods.Closable; -import com.craftaro.core.third_party.com.cryptomorin.xseries.XMaterial; import com.craftaro.core.utils.TextUtils; import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.api.Anchor; import com.craftaro.epicanchors.files.Settings; import com.craftaro.epicanchors.utils.Callback; +import com.craftaro.third_party.com.cryptomorin.xseries.XMaterial; public class DestroyConfirmationGui extends Gui { private final EpicAnchors plugin; diff --git a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java index f1776f0..184d940 100644 --- a/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java +++ b/EpicAnchors-Plugin/src/main/java/com/craftaro/epicanchors/listener/AnchorListener.java @@ -2,7 +2,6 @@ package com.craftaro.epicanchors.listener; import com.craftaro.core.compatibility.CompatibleHand; import com.craftaro.core.compatibility.CompatibleParticleHandler; -import com.craftaro.core.third_party.com.cryptomorin.xseries.XSound; import com.craftaro.epicanchors.AnchorManagerImpl; import com.craftaro.epicanchors.EpicAnchors; import com.craftaro.epicanchors.api.Anchor; @@ -10,6 +9,7 @@ import com.craftaro.epicanchors.files.Settings; import com.craftaro.epicanchors.guis.AnchorGui; import com.craftaro.epicanchors.guis.DestroyConfirmationGui; import com.craftaro.epicanchors.utils.Utils; +import com.craftaro.third_party.com.cryptomorin.xseries.XSound; import org.bukkit.Bukkit; import org.bukkit.GameMode; import org.bukkit.Material; From ca28ff77ae3cf632f1ee2b9b288c593aeb9ba6bf Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sat, 13 Jan 2024 17:04:14 +0100 Subject: [PATCH 46/51] Release v3.1.0 --- EpicAnchors-API/pom.xml | 2 +- EpicAnchors-Plugin/pom.xml | 2 +- pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 3528d44..03ecfe6 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 3.0.0-b3-SNAPSHOT + 3.1.0 ../pom.xml EpicAnchors-API diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 3164bdb..09863e1 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 3.0.0-b3-SNAPSHOT + 3.1.0 ../pom.xml EpicAnchors-Plugin diff --git a/pom.xml b/pom.xml index 580b1c5..800e459 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent pom - 3.0.0-b3-SNAPSHOT + 3.1.0 From 3b1f12a94bf5867eeafb8068565e66eeb205b766 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 08:38:20 +0100 Subject: [PATCH 47/51] Bump actions/cache from 3 to 4 (#38) Bumps [actions/cache](https://github.com/actions/cache) from 3 to 4. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/sonarcloud.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 69403a1..34660ae 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -25,7 +25,7 @@ jobs: uses: craftaro/GH-Commons/.github/actions/setup_workspace@master - name: 'Cache: SonarCloud' - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar From fa20a3f013968fea1ca5adcc9cc42499bea847bb Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Fri, 2 Feb 2024 18:57:54 +0100 Subject: [PATCH 48/51] build: Disable 'missing' warnings in javadocs plugin --- EpicAnchors-API/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 03ecfe6..1699297 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -28,6 +28,7 @@ + all,-missing https://hub.spigotmc.org/javadocs/spigot/ From e806e29a58ce9e40cb4428f7f96e3e4b570e408d Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Mon, 26 Feb 2024 12:53:54 +0100 Subject: [PATCH 49/51] ci: Fix potentially problematic `increment_version` value --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 67fc6c9..ab94f2e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,7 +35,7 @@ jobs: with: append_snapshot: ${{ github.ref_type == 'tag' && 'false' || 'true' }} version: ${{ github.ref_type == 'tag' && github.ref_name || '' }} - increment_version: ${{ github.ref_type == 'tag' && '' || 'patch' }} + increment_version: ${{ github.ref_type != 'tag' && 'patch' || '' }} increment_version_only_if_not_snapshot_version: ${{ github.ref == 'refs/heads/development' && 'true' || 'false' }} - name: Build with Maven From af4cd8de3e4806c362bfac3112fec90948c64cb0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Mar 2024 13:28:46 +0100 Subject: [PATCH 50/51] Bump org.apache.maven.plugins:maven-shade-plugin from 3.5.1 to 3.5.2 (#39) Bumps [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/apache/maven-shade-plugin/releases) - [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.5.1...maven-shade-plugin-3.5.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-shade-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- EpicAnchors-Plugin/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index 09863e1..a128453 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -17,7 +17,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.5.1 + 3.5.2 From 7e1fff71059d779e01eeb0188efeca87ed64d05b Mon Sep 17 00:00:00 2001 From: Christian Koop Date: Sun, 24 Mar 2024 11:16:01 +0100 Subject: [PATCH 51/51] Release v3.1.1 --- EpicAnchors-API/pom.xml | 2 +- EpicAnchors-Plugin/pom.xml | 2 +- pom.xml | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/EpicAnchors-API/pom.xml b/EpicAnchors-API/pom.xml index 1699297..3f996fc 100644 --- a/EpicAnchors-API/pom.xml +++ b/EpicAnchors-API/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 3.1.0 + 3.1.1 ../pom.xml EpicAnchors-API diff --git a/EpicAnchors-Plugin/pom.xml b/EpicAnchors-Plugin/pom.xml index a128453..5716d3b 100644 --- a/EpicAnchors-Plugin/pom.xml +++ b/EpicAnchors-Plugin/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent - 3.1.0 + 3.1.1 ../pom.xml EpicAnchors-Plugin diff --git a/pom.xml b/pom.xml index 800e459..f9efe32 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ com.craftaro EpicAnchors-Parent pom - 3.1.0 + 3.1.1 @@ -20,7 +20,7 @@ https://craftaro.com/marketplace/product/31 - 3.0.0-SNAPSHOT + 3.0.1-SNAPSHOT 8 1.8