mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2025-07-05 15:14:43 +02:00
Compare commits
1 Commits
feat/mutab
...
refactor/v
Author | SHA1 | Date | |
---|---|---|---|
512ccd4bbf |
630
.editorconfig
630
.editorconfig
@ -13,6 +13,40 @@ ij_formatter_tags_enabled = false
|
|||||||
ij_smart_tabs = false
|
ij_smart_tabs = false
|
||||||
ij_wrap_on_typing = true
|
ij_wrap_on_typing = true
|
||||||
|
|
||||||
|
[*.conf]
|
||||||
|
indent_size = 2
|
||||||
|
tab_width = 2
|
||||||
|
ij_continuation_indent_size = 2
|
||||||
|
ij_hocon_keep_blank_lines_before_right_brace = 2
|
||||||
|
ij_hocon_keep_indents_on_empty_lines = false
|
||||||
|
ij_hocon_keep_line_breaks = true
|
||||||
|
ij_hocon_space_after_colon = true
|
||||||
|
ij_hocon_space_after_comma = true
|
||||||
|
ij_hocon_space_before_colon = true
|
||||||
|
ij_hocon_space_before_comma = false
|
||||||
|
ij_hocon_spaces_within_braces = false
|
||||||
|
ij_hocon_spaces_within_brackets = false
|
||||||
|
ij_hocon_spaces_within_method_call_parentheses = false
|
||||||
|
|
||||||
|
[*.css]
|
||||||
|
ij_css_align_closing_brace_with_properties = false
|
||||||
|
ij_css_blank_lines_around_nested_selector = 1
|
||||||
|
ij_css_blank_lines_between_blocks = 1
|
||||||
|
ij_css_brace_placement = end_of_line
|
||||||
|
ij_css_enforce_quotes_on_format = false
|
||||||
|
ij_css_hex_color_long_format = false
|
||||||
|
ij_css_hex_color_lower_case = false
|
||||||
|
ij_css_hex_color_short_format = false
|
||||||
|
ij_css_hex_color_upper_case = false
|
||||||
|
ij_css_keep_blank_lines_in_code = 2
|
||||||
|
ij_css_keep_indents_on_empty_lines = false
|
||||||
|
ij_css_keep_single_line_blocks = false
|
||||||
|
ij_css_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
|
||||||
|
ij_css_space_after_colon = true
|
||||||
|
ij_css_space_before_opening_brace = true
|
||||||
|
ij_css_use_double_quotes = true
|
||||||
|
ij_css_value_alignment = do_not_align
|
||||||
|
|
||||||
[*.java]
|
[*.java]
|
||||||
ij_java_align_consecutive_assignments = false
|
ij_java_align_consecutive_assignments = false
|
||||||
ij_java_align_consecutive_variable_declarations = false
|
ij_java_align_consecutive_variable_declarations = false
|
||||||
@ -243,12 +277,63 @@ ij_java_wrap_comments = false
|
|||||||
ij_java_wrap_first_method_in_call_chain = true
|
ij_java_wrap_first_method_in_call_chain = true
|
||||||
ij_java_wrap_long_lines = false
|
ij_java_wrap_long_lines = false
|
||||||
|
|
||||||
|
[*.nbtt]
|
||||||
|
max_line_length = 150
|
||||||
|
ij_continuation_indent_size = 4
|
||||||
|
ij_nbtt_keep_indents_on_empty_lines = false
|
||||||
|
ij_nbtt_space_after_colon = true
|
||||||
|
ij_nbtt_space_after_comma = true
|
||||||
|
ij_nbtt_space_before_colon = true
|
||||||
|
ij_nbtt_space_before_comma = false
|
||||||
|
ij_nbtt_spaces_within_brackets = false
|
||||||
|
ij_nbtt_spaces_within_parentheses = false
|
||||||
|
|
||||||
[*.properties]
|
[*.properties]
|
||||||
ij_properties_align_group_field_declarations = false
|
ij_properties_align_group_field_declarations = false
|
||||||
ij_properties_keep_blank_lines = false
|
ij_properties_keep_blank_lines = false
|
||||||
ij_properties_key_value_delimiter = equals
|
ij_properties_key_value_delimiter = equals
|
||||||
ij_properties_spaces_around_key_value_delimiter = false
|
ij_properties_spaces_around_key_value_delimiter = false
|
||||||
|
|
||||||
|
[*.sass]
|
||||||
|
indent_size = 2
|
||||||
|
ij_sass_align_closing_brace_with_properties = false
|
||||||
|
ij_sass_blank_lines_around_nested_selector = 1
|
||||||
|
ij_sass_blank_lines_between_blocks = 1
|
||||||
|
ij_sass_brace_placement = 0
|
||||||
|
ij_sass_enforce_quotes_on_format = false
|
||||||
|
ij_sass_hex_color_long_format = false
|
||||||
|
ij_sass_hex_color_lower_case = false
|
||||||
|
ij_sass_hex_color_short_format = false
|
||||||
|
ij_sass_hex_color_upper_case = false
|
||||||
|
ij_sass_keep_blank_lines_in_code = 2
|
||||||
|
ij_sass_keep_indents_on_empty_lines = false
|
||||||
|
ij_sass_keep_single_line_blocks = false
|
||||||
|
ij_sass_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
|
||||||
|
ij_sass_space_after_colon = true
|
||||||
|
ij_sass_space_before_opening_brace = true
|
||||||
|
ij_sass_use_double_quotes = true
|
||||||
|
ij_sass_value_alignment = 0
|
||||||
|
|
||||||
|
[*.scss]
|
||||||
|
indent_size = 2
|
||||||
|
ij_scss_align_closing_brace_with_properties = false
|
||||||
|
ij_scss_blank_lines_around_nested_selector = 1
|
||||||
|
ij_scss_blank_lines_between_blocks = 1
|
||||||
|
ij_scss_brace_placement = 0
|
||||||
|
ij_scss_enforce_quotes_on_format = false
|
||||||
|
ij_scss_hex_color_long_format = false
|
||||||
|
ij_scss_hex_color_lower_case = false
|
||||||
|
ij_scss_hex_color_short_format = false
|
||||||
|
ij_scss_hex_color_upper_case = false
|
||||||
|
ij_scss_keep_blank_lines_in_code = 2
|
||||||
|
ij_scss_keep_indents_on_empty_lines = false
|
||||||
|
ij_scss_keep_single_line_blocks = false
|
||||||
|
ij_scss_properties_order = font, font-family, font-size, font-weight, font-style, font-variant, font-size-adjust, font-stretch, line-height, position, z-index, top, right, bottom, left, display, visibility, float, clear, overflow, overflow-x, overflow-y, clip, zoom, align-content, align-items, align-self, flex, flex-flow, flex-basis, flex-direction, flex-grow, flex-shrink, flex-wrap, justify-content, order, box-sizing, width, min-width, max-width, height, min-height, max-height, margin, margin-top, margin-right, margin-bottom, margin-left, padding, padding-top, padding-right, padding-bottom, padding-left, table-layout, empty-cells, caption-side, border-spacing, border-collapse, list-style, list-style-position, list-style-type, list-style-image, content, quotes, counter-reset, counter-increment, resize, cursor, user-select, nav-index, nav-up, nav-right, nav-down, nav-left, transition, transition-delay, transition-timing-function, transition-duration, transition-property, transform, transform-origin, animation, animation-name, animation-duration, animation-play-state, animation-timing-function, animation-delay, animation-iteration-count, animation-direction, text-align, text-align-last, vertical-align, white-space, text-decoration, text-emphasis, text-emphasis-color, text-emphasis-style, text-emphasis-position, text-indent, text-justify, letter-spacing, word-spacing, text-outline, text-transform, text-wrap, text-overflow, text-overflow-ellipsis, text-overflow-mode, word-wrap, word-break, tab-size, hyphens, pointer-events, opacity, color, border, border-width, border-style, border-color, border-top, border-top-width, border-top-style, border-top-color, border-right, border-right-width, border-right-style, border-right-color, border-bottom, border-bottom-width, border-bottom-style, border-bottom-color, border-left, border-left-width, border-left-style, border-left-color, border-radius, border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius, border-image, border-image-source, border-image-slice, border-image-width, border-image-outset, border-image-repeat, outline, outline-width, outline-style, outline-color, outline-offset, background, background-color, background-image, background-repeat, background-attachment, background-position, background-position-x, background-position-y, background-clip, background-origin, background-size, box-decoration-break, box-shadow, text-shadow
|
||||||
|
ij_scss_space_after_colon = true
|
||||||
|
ij_scss_space_before_opening_brace = true
|
||||||
|
ij_scss_use_double_quotes = true
|
||||||
|
ij_scss_value_alignment = 0
|
||||||
|
|
||||||
[.editorconfig]
|
[.editorconfig]
|
||||||
ij_editorconfig_align_group_field_declarations = false
|
ij_editorconfig_align_group_field_declarations = false
|
||||||
ij_editorconfig_space_after_colon = false
|
ij_editorconfig_space_after_colon = false
|
||||||
@ -257,6 +342,548 @@ ij_editorconfig_space_before_colon = false
|
|||||||
ij_editorconfig_space_before_comma = false
|
ij_editorconfig_space_before_comma = false
|
||||||
ij_editorconfig_spaces_around_assignment_operators = true
|
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
|
||||||
|
|
||||||
|
[{*.ats, *.ts}]
|
||||||
|
ij_continuation_indent_size = 4
|
||||||
|
ij_typescript_align_imports = false
|
||||||
|
ij_typescript_align_multiline_array_initializer_expression = false
|
||||||
|
ij_typescript_align_multiline_binary_operation = false
|
||||||
|
ij_typescript_align_multiline_chained_methods = false
|
||||||
|
ij_typescript_align_multiline_extends_list = false
|
||||||
|
ij_typescript_align_multiline_for = true
|
||||||
|
ij_typescript_align_multiline_parameters = true
|
||||||
|
ij_typescript_align_multiline_parameters_in_calls = false
|
||||||
|
ij_typescript_align_multiline_ternary_operation = false
|
||||||
|
ij_typescript_align_object_properties = 0
|
||||||
|
ij_typescript_align_union_types = false
|
||||||
|
ij_typescript_align_var_statements = 0
|
||||||
|
ij_typescript_array_initializer_new_line_after_left_brace = false
|
||||||
|
ij_typescript_array_initializer_right_brace_on_new_line = false
|
||||||
|
ij_typescript_array_initializer_wrap = off
|
||||||
|
ij_typescript_assignment_wrap = off
|
||||||
|
ij_typescript_binary_operation_sign_on_next_line = false
|
||||||
|
ij_typescript_binary_operation_wrap = off
|
||||||
|
ij_typescript_blacklist_imports = rxjs/Rx, node_modules/**, **/node_modules/**, @angular/material, @angular/material/typings/**
|
||||||
|
ij_typescript_blank_lines_after_imports = 1
|
||||||
|
ij_typescript_blank_lines_around_class = 1
|
||||||
|
ij_typescript_blank_lines_around_field = 0
|
||||||
|
ij_typescript_blank_lines_around_field_in_interface = 0
|
||||||
|
ij_typescript_blank_lines_around_function = 1
|
||||||
|
ij_typescript_blank_lines_around_method = 1
|
||||||
|
ij_typescript_blank_lines_around_method_in_interface = 1
|
||||||
|
ij_typescript_block_brace_style = end_of_line
|
||||||
|
ij_typescript_call_parameters_new_line_after_left_paren = false
|
||||||
|
ij_typescript_call_parameters_right_paren_on_new_line = false
|
||||||
|
ij_typescript_call_parameters_wrap = off
|
||||||
|
ij_typescript_catch_on_new_line = false
|
||||||
|
ij_typescript_chained_call_dot_on_new_line = true
|
||||||
|
ij_typescript_class_brace_style = end_of_line
|
||||||
|
ij_typescript_comma_on_new_line = false
|
||||||
|
ij_typescript_do_while_brace_force = never
|
||||||
|
ij_typescript_else_on_new_line = false
|
||||||
|
ij_typescript_enforce_trailing_comma = keep
|
||||||
|
ij_typescript_extends_keyword_wrap = off
|
||||||
|
ij_typescript_extends_list_wrap = off
|
||||||
|
ij_typescript_field_prefix = _
|
||||||
|
ij_typescript_file_name_style = relaxed
|
||||||
|
ij_typescript_finally_on_new_line = false
|
||||||
|
ij_typescript_for_brace_force = never
|
||||||
|
ij_typescript_for_statement_new_line_after_left_paren = false
|
||||||
|
ij_typescript_for_statement_right_paren_on_new_line = false
|
||||||
|
ij_typescript_for_statement_wrap = off
|
||||||
|
ij_typescript_force_quote_style = false
|
||||||
|
ij_typescript_force_semicolon_style = false
|
||||||
|
ij_typescript_function_expression_brace_style = end_of_line
|
||||||
|
ij_typescript_if_brace_force = never
|
||||||
|
ij_typescript_import_merge_members = global
|
||||||
|
ij_typescript_import_prefer_absolute_path = global
|
||||||
|
ij_typescript_import_sort_members = true
|
||||||
|
ij_typescript_import_sort_module_name = false
|
||||||
|
ij_typescript_import_use_node_resolution = true
|
||||||
|
ij_typescript_imports_wrap = on_every_item
|
||||||
|
ij_typescript_indent_case_from_switch = true
|
||||||
|
ij_typescript_indent_chained_calls = true
|
||||||
|
ij_typescript_indent_package_children = 0
|
||||||
|
ij_typescript_jsdoc_include_types = false
|
||||||
|
ij_typescript_jsx_attribute_value = braces
|
||||||
|
ij_typescript_keep_blank_lines_in_code = 2
|
||||||
|
ij_typescript_keep_first_column_comment = true
|
||||||
|
ij_typescript_keep_indents_on_empty_lines = false
|
||||||
|
ij_typescript_keep_line_breaks = true
|
||||||
|
ij_typescript_keep_simple_blocks_in_one_line = false
|
||||||
|
ij_typescript_keep_simple_methods_in_one_line = false
|
||||||
|
ij_typescript_line_comment_add_space = true
|
||||||
|
ij_typescript_line_comment_at_first_column = false
|
||||||
|
ij_typescript_method_brace_style = end_of_line
|
||||||
|
ij_typescript_method_call_chain_wrap = off
|
||||||
|
ij_typescript_method_parameters_new_line_after_left_paren = false
|
||||||
|
ij_typescript_method_parameters_right_paren_on_new_line = false
|
||||||
|
ij_typescript_method_parameters_wrap = off
|
||||||
|
ij_typescript_object_literal_wrap = on_every_item
|
||||||
|
ij_typescript_parentheses_expression_new_line_after_left_paren = false
|
||||||
|
ij_typescript_parentheses_expression_right_paren_on_new_line = false
|
||||||
|
ij_typescript_place_assignment_sign_on_next_line = false
|
||||||
|
ij_typescript_prefer_as_type_cast = false
|
||||||
|
ij_typescript_prefer_explicit_types_function_expression_returns = false
|
||||||
|
ij_typescript_prefer_explicit_types_function_returns = false
|
||||||
|
ij_typescript_prefer_explicit_types_vars_fields = false
|
||||||
|
ij_typescript_prefer_parameters_wrap = false
|
||||||
|
ij_typescript_reformat_c_style_comments = false
|
||||||
|
ij_typescript_space_after_colon = true
|
||||||
|
ij_typescript_space_after_comma = true
|
||||||
|
ij_typescript_space_after_dots_in_rest_parameter = false
|
||||||
|
ij_typescript_space_after_generator_mult = true
|
||||||
|
ij_typescript_space_after_property_colon = true
|
||||||
|
ij_typescript_space_after_quest = true
|
||||||
|
ij_typescript_space_after_type_colon = true
|
||||||
|
ij_typescript_space_after_unary_not = false
|
||||||
|
ij_typescript_space_before_async_arrow_lparen = true
|
||||||
|
ij_typescript_space_before_catch_keyword = true
|
||||||
|
ij_typescript_space_before_catch_left_brace = true
|
||||||
|
ij_typescript_space_before_catch_parentheses = true
|
||||||
|
ij_typescript_space_before_class_lbrace = true
|
||||||
|
ij_typescript_space_before_class_left_brace = true
|
||||||
|
ij_typescript_space_before_colon = true
|
||||||
|
ij_typescript_space_before_comma = false
|
||||||
|
ij_typescript_space_before_do_left_brace = true
|
||||||
|
ij_typescript_space_before_else_keyword = true
|
||||||
|
ij_typescript_space_before_else_left_brace = true
|
||||||
|
ij_typescript_space_before_finally_keyword = true
|
||||||
|
ij_typescript_space_before_finally_left_brace = true
|
||||||
|
ij_typescript_space_before_for_left_brace = true
|
||||||
|
ij_typescript_space_before_for_parentheses = true
|
||||||
|
ij_typescript_space_before_for_semicolon = false
|
||||||
|
ij_typescript_space_before_function_left_parenth = true
|
||||||
|
ij_typescript_space_before_generator_mult = false
|
||||||
|
ij_typescript_space_before_if_left_brace = true
|
||||||
|
ij_typescript_space_before_if_parentheses = true
|
||||||
|
ij_typescript_space_before_method_call_parentheses = false
|
||||||
|
ij_typescript_space_before_method_left_brace = true
|
||||||
|
ij_typescript_space_before_method_parentheses = false
|
||||||
|
ij_typescript_space_before_property_colon = false
|
||||||
|
ij_typescript_space_before_quest = true
|
||||||
|
ij_typescript_space_before_switch_left_brace = true
|
||||||
|
ij_typescript_space_before_switch_parentheses = true
|
||||||
|
ij_typescript_space_before_try_left_brace = true
|
||||||
|
ij_typescript_space_before_type_colon = false
|
||||||
|
ij_typescript_space_before_unary_not = false
|
||||||
|
ij_typescript_space_before_while_keyword = true
|
||||||
|
ij_typescript_space_before_while_left_brace = true
|
||||||
|
ij_typescript_space_before_while_parentheses = true
|
||||||
|
ij_typescript_spaces_around_additive_operators = true
|
||||||
|
ij_typescript_spaces_around_arrow_function_operator = true
|
||||||
|
ij_typescript_spaces_around_assignment_operators = true
|
||||||
|
ij_typescript_spaces_around_bitwise_operators = true
|
||||||
|
ij_typescript_spaces_around_equality_operators = true
|
||||||
|
ij_typescript_spaces_around_logical_operators = true
|
||||||
|
ij_typescript_spaces_around_multiplicative_operators = true
|
||||||
|
ij_typescript_spaces_around_relational_operators = true
|
||||||
|
ij_typescript_spaces_around_shift_operators = true
|
||||||
|
ij_typescript_spaces_around_unary_operator = false
|
||||||
|
ij_typescript_spaces_within_array_initializer_brackets = false
|
||||||
|
ij_typescript_spaces_within_brackets = false
|
||||||
|
ij_typescript_spaces_within_catch_parentheses = false
|
||||||
|
ij_typescript_spaces_within_for_parentheses = false
|
||||||
|
ij_typescript_spaces_within_if_parentheses = false
|
||||||
|
ij_typescript_spaces_within_imports = false
|
||||||
|
ij_typescript_spaces_within_interpolation_expressions = false
|
||||||
|
ij_typescript_spaces_within_method_call_parentheses = false
|
||||||
|
ij_typescript_spaces_within_method_parentheses = false
|
||||||
|
ij_typescript_spaces_within_object_literal_braces = false
|
||||||
|
ij_typescript_spaces_within_object_type_braces = true
|
||||||
|
ij_typescript_spaces_within_parentheses = false
|
||||||
|
ij_typescript_spaces_within_switch_parentheses = false
|
||||||
|
ij_typescript_spaces_within_type_assertion = false
|
||||||
|
ij_typescript_spaces_within_union_types = true
|
||||||
|
ij_typescript_spaces_within_while_parentheses = false
|
||||||
|
ij_typescript_special_else_if_treatment = true
|
||||||
|
ij_typescript_ternary_operation_signs_on_next_line = false
|
||||||
|
ij_typescript_ternary_operation_wrap = off
|
||||||
|
ij_typescript_union_types_wrap = on_every_item
|
||||||
|
ij_typescript_use_chained_calls_group_indents = false
|
||||||
|
ij_typescript_use_double_quotes = true
|
||||||
|
ij_typescript_use_explicit_js_extension = global
|
||||||
|
ij_typescript_use_path_mapping = always
|
||||||
|
ij_typescript_use_public_modifier = false
|
||||||
|
ij_typescript_use_semicolon_after_statement = true
|
||||||
|
ij_typescript_var_declaration_wrap = normal
|
||||||
|
ij_typescript_while_brace_force = never
|
||||||
|
ij_typescript_while_on_new_line = false
|
||||||
|
ij_typescript_wrap_comments = false
|
||||||
|
|
||||||
|
[{*.bash, *.sh, *.zsh}]
|
||||||
|
indent_size = 2
|
||||||
|
tab_width = 2
|
||||||
|
ij_shell_binary_ops_start_line = false
|
||||||
|
ij_shell_keep_column_alignment_padding = false
|
||||||
|
ij_shell_minify_program = false
|
||||||
|
ij_shell_redirect_followed_by_space = false
|
||||||
|
ij_shell_switch_cases_indented = false
|
||||||
|
|
||||||
|
[{*.cjs, *.js}]
|
||||||
|
ij_continuation_indent_size = 4
|
||||||
|
ij_javascript_align_imports = false
|
||||||
|
ij_javascript_align_multiline_array_initializer_expression = false
|
||||||
|
ij_javascript_align_multiline_binary_operation = false
|
||||||
|
ij_javascript_align_multiline_chained_methods = false
|
||||||
|
ij_javascript_align_multiline_extends_list = false
|
||||||
|
ij_javascript_align_multiline_for = true
|
||||||
|
ij_javascript_align_multiline_parameters = true
|
||||||
|
ij_javascript_align_multiline_parameters_in_calls = false
|
||||||
|
ij_javascript_align_multiline_ternary_operation = false
|
||||||
|
ij_javascript_align_object_properties = 0
|
||||||
|
ij_javascript_align_union_types = false
|
||||||
|
ij_javascript_align_var_statements = 0
|
||||||
|
ij_javascript_array_initializer_new_line_after_left_brace = false
|
||||||
|
ij_javascript_array_initializer_right_brace_on_new_line = false
|
||||||
|
ij_javascript_array_initializer_wrap = off
|
||||||
|
ij_javascript_assignment_wrap = off
|
||||||
|
ij_javascript_binary_operation_sign_on_next_line = false
|
||||||
|
ij_javascript_binary_operation_wrap = off
|
||||||
|
ij_javascript_blacklist_imports = rxjs/Rx, node_modules/**, **/node_modules/**, @angular/material, @angular/material/typings/**
|
||||||
|
ij_javascript_blank_lines_after_imports = 1
|
||||||
|
ij_javascript_blank_lines_around_class = 1
|
||||||
|
ij_javascript_blank_lines_around_field = 0
|
||||||
|
ij_javascript_blank_lines_around_function = 1
|
||||||
|
ij_javascript_blank_lines_around_method = 1
|
||||||
|
ij_javascript_block_brace_style = end_of_line
|
||||||
|
ij_javascript_call_parameters_new_line_after_left_paren = false
|
||||||
|
ij_javascript_call_parameters_right_paren_on_new_line = false
|
||||||
|
ij_javascript_call_parameters_wrap = off
|
||||||
|
ij_javascript_catch_on_new_line = false
|
||||||
|
ij_javascript_chained_call_dot_on_new_line = true
|
||||||
|
ij_javascript_class_brace_style = end_of_line
|
||||||
|
ij_javascript_comma_on_new_line = false
|
||||||
|
ij_javascript_do_while_brace_force = never
|
||||||
|
ij_javascript_else_on_new_line = false
|
||||||
|
ij_javascript_enforce_trailing_comma = keep
|
||||||
|
ij_javascript_extends_keyword_wrap = off
|
||||||
|
ij_javascript_extends_list_wrap = off
|
||||||
|
ij_javascript_field_prefix = _
|
||||||
|
ij_javascript_file_name_style = relaxed
|
||||||
|
ij_javascript_finally_on_new_line = false
|
||||||
|
ij_javascript_for_brace_force = never
|
||||||
|
ij_javascript_for_statement_new_line_after_left_paren = false
|
||||||
|
ij_javascript_for_statement_right_paren_on_new_line = false
|
||||||
|
ij_javascript_for_statement_wrap = off
|
||||||
|
ij_javascript_force_quote_style = false
|
||||||
|
ij_javascript_force_semicolon_style = false
|
||||||
|
ij_javascript_function_expression_brace_style = end_of_line
|
||||||
|
ij_javascript_if_brace_force = never
|
||||||
|
ij_javascript_import_merge_members = global
|
||||||
|
ij_javascript_import_prefer_absolute_path = global
|
||||||
|
ij_javascript_import_sort_members = true
|
||||||
|
ij_javascript_import_sort_module_name = false
|
||||||
|
ij_javascript_import_use_node_resolution = true
|
||||||
|
ij_javascript_imports_wrap = on_every_item
|
||||||
|
ij_javascript_indent_case_from_switch = true
|
||||||
|
ij_javascript_indent_chained_calls = true
|
||||||
|
ij_javascript_indent_package_children = 0
|
||||||
|
ij_javascript_jsx_attribute_value = braces
|
||||||
|
ij_javascript_keep_blank_lines_in_code = 2
|
||||||
|
ij_javascript_keep_first_column_comment = true
|
||||||
|
ij_javascript_keep_indents_on_empty_lines = false
|
||||||
|
ij_javascript_keep_line_breaks = true
|
||||||
|
ij_javascript_keep_simple_blocks_in_one_line = false
|
||||||
|
ij_javascript_keep_simple_methods_in_one_line = false
|
||||||
|
ij_javascript_line_comment_add_space = true
|
||||||
|
ij_javascript_line_comment_at_first_column = false
|
||||||
|
ij_javascript_method_brace_style = end_of_line
|
||||||
|
ij_javascript_method_call_chain_wrap = off
|
||||||
|
ij_javascript_method_parameters_new_line_after_left_paren = false
|
||||||
|
ij_javascript_method_parameters_right_paren_on_new_line = false
|
||||||
|
ij_javascript_method_parameters_wrap = off
|
||||||
|
ij_javascript_object_literal_wrap = on_every_item
|
||||||
|
ij_javascript_parentheses_expression_new_line_after_left_paren = false
|
||||||
|
ij_javascript_parentheses_expression_right_paren_on_new_line = false
|
||||||
|
ij_javascript_place_assignment_sign_on_next_line = false
|
||||||
|
ij_javascript_prefer_as_type_cast = false
|
||||||
|
ij_javascript_prefer_explicit_types_function_expression_returns = false
|
||||||
|
ij_javascript_prefer_explicit_types_function_returns = false
|
||||||
|
ij_javascript_prefer_explicit_types_vars_fields = false
|
||||||
|
ij_javascript_prefer_parameters_wrap = false
|
||||||
|
ij_javascript_reformat_c_style_comments = false
|
||||||
|
ij_javascript_space_after_colon = true
|
||||||
|
ij_javascript_space_after_comma = true
|
||||||
|
ij_javascript_space_after_dots_in_rest_parameter = false
|
||||||
|
ij_javascript_space_after_generator_mult = true
|
||||||
|
ij_javascript_space_after_property_colon = true
|
||||||
|
ij_javascript_space_after_quest = true
|
||||||
|
ij_javascript_space_after_type_colon = true
|
||||||
|
ij_javascript_space_after_unary_not = false
|
||||||
|
ij_javascript_space_before_async_arrow_lparen = true
|
||||||
|
ij_javascript_space_before_catch_keyword = true
|
||||||
|
ij_javascript_space_before_catch_left_brace = true
|
||||||
|
ij_javascript_space_before_catch_parentheses = true
|
||||||
|
ij_javascript_space_before_class_lbrace = true
|
||||||
|
ij_javascript_space_before_class_left_brace = true
|
||||||
|
ij_javascript_space_before_colon = true
|
||||||
|
ij_javascript_space_before_comma = false
|
||||||
|
ij_javascript_space_before_do_left_brace = true
|
||||||
|
ij_javascript_space_before_else_keyword = true
|
||||||
|
ij_javascript_space_before_else_left_brace = true
|
||||||
|
ij_javascript_space_before_finally_keyword = true
|
||||||
|
ij_javascript_space_before_finally_left_brace = true
|
||||||
|
ij_javascript_space_before_for_left_brace = true
|
||||||
|
ij_javascript_space_before_for_parentheses = true
|
||||||
|
ij_javascript_space_before_for_semicolon = false
|
||||||
|
ij_javascript_space_before_function_left_parenth = true
|
||||||
|
ij_javascript_space_before_generator_mult = false
|
||||||
|
ij_javascript_space_before_if_left_brace = true
|
||||||
|
ij_javascript_space_before_if_parentheses = true
|
||||||
|
ij_javascript_space_before_method_call_parentheses = false
|
||||||
|
ij_javascript_space_before_method_left_brace = true
|
||||||
|
ij_javascript_space_before_method_parentheses = false
|
||||||
|
ij_javascript_space_before_property_colon = false
|
||||||
|
ij_javascript_space_before_quest = true
|
||||||
|
ij_javascript_space_before_switch_left_brace = true
|
||||||
|
ij_javascript_space_before_switch_parentheses = true
|
||||||
|
ij_javascript_space_before_try_left_brace = true
|
||||||
|
ij_javascript_space_before_type_colon = false
|
||||||
|
ij_javascript_space_before_unary_not = false
|
||||||
|
ij_javascript_space_before_while_keyword = true
|
||||||
|
ij_javascript_space_before_while_left_brace = true
|
||||||
|
ij_javascript_space_before_while_parentheses = true
|
||||||
|
ij_javascript_spaces_around_additive_operators = true
|
||||||
|
ij_javascript_spaces_around_arrow_function_operator = true
|
||||||
|
ij_javascript_spaces_around_assignment_operators = true
|
||||||
|
ij_javascript_spaces_around_bitwise_operators = true
|
||||||
|
ij_javascript_spaces_around_equality_operators = true
|
||||||
|
ij_javascript_spaces_around_logical_operators = true
|
||||||
|
ij_javascript_spaces_around_multiplicative_operators = true
|
||||||
|
ij_javascript_spaces_around_relational_operators = true
|
||||||
|
ij_javascript_spaces_around_shift_operators = true
|
||||||
|
ij_javascript_spaces_around_unary_operator = false
|
||||||
|
ij_javascript_spaces_within_array_initializer_brackets = false
|
||||||
|
ij_javascript_spaces_within_brackets = false
|
||||||
|
ij_javascript_spaces_within_catch_parentheses = false
|
||||||
|
ij_javascript_spaces_within_for_parentheses = false
|
||||||
|
ij_javascript_spaces_within_if_parentheses = false
|
||||||
|
ij_javascript_spaces_within_imports = false
|
||||||
|
ij_javascript_spaces_within_interpolation_expressions = false
|
||||||
|
ij_javascript_spaces_within_method_call_parentheses = false
|
||||||
|
ij_javascript_spaces_within_method_parentheses = false
|
||||||
|
ij_javascript_spaces_within_object_literal_braces = false
|
||||||
|
ij_javascript_spaces_within_object_type_braces = true
|
||||||
|
ij_javascript_spaces_within_parentheses = false
|
||||||
|
ij_javascript_spaces_within_switch_parentheses = false
|
||||||
|
ij_javascript_spaces_within_type_assertion = false
|
||||||
|
ij_javascript_spaces_within_union_types = true
|
||||||
|
ij_javascript_spaces_within_while_parentheses = false
|
||||||
|
ij_javascript_special_else_if_treatment = true
|
||||||
|
ij_javascript_ternary_operation_signs_on_next_line = false
|
||||||
|
ij_javascript_ternary_operation_wrap = off
|
||||||
|
ij_javascript_union_types_wrap = on_every_item
|
||||||
|
ij_javascript_use_chained_calls_group_indents = false
|
||||||
|
ij_javascript_use_double_quotes = true
|
||||||
|
ij_javascript_use_explicit_js_extension = global
|
||||||
|
ij_javascript_use_path_mapping = always
|
||||||
|
ij_javascript_use_public_modifier = false
|
||||||
|
ij_javascript_use_semicolon_after_statement = true
|
||||||
|
ij_javascript_var_declaration_wrap = normal
|
||||||
|
ij_javascript_while_brace_force = never
|
||||||
|
ij_javascript_while_on_new_line = false
|
||||||
|
ij_javascript_wrap_comments = false
|
||||||
|
|
||||||
|
[{*.ft, *.vm, *.vsl}]
|
||||||
|
ij_vtl_keep_indents_on_empty_lines = false
|
||||||
|
|
||||||
|
[{*.gant, *.gradle, *.groovy, *.gy}]
|
||||||
|
ij_groovy_align_group_field_declarations = false
|
||||||
|
ij_groovy_align_multiline_array_initializer_expression = false
|
||||||
|
ij_groovy_align_multiline_assignment = false
|
||||||
|
ij_groovy_align_multiline_binary_operation = false
|
||||||
|
ij_groovy_align_multiline_chained_methods = false
|
||||||
|
ij_groovy_align_multiline_extends_list = false
|
||||||
|
ij_groovy_align_multiline_for = true
|
||||||
|
ij_groovy_align_multiline_list_or_map = true
|
||||||
|
ij_groovy_align_multiline_method_parentheses = false
|
||||||
|
ij_groovy_align_multiline_parameters = true
|
||||||
|
ij_groovy_align_multiline_parameters_in_calls = false
|
||||||
|
ij_groovy_align_multiline_resources = true
|
||||||
|
ij_groovy_align_multiline_ternary_operation = false
|
||||||
|
ij_groovy_align_multiline_throws_list = false
|
||||||
|
ij_groovy_align_named_args_in_map = true
|
||||||
|
ij_groovy_align_throws_keyword = false
|
||||||
|
ij_groovy_array_initializer_new_line_after_left_brace = false
|
||||||
|
ij_groovy_array_initializer_right_brace_on_new_line = false
|
||||||
|
ij_groovy_array_initializer_wrap = off
|
||||||
|
ij_groovy_assert_statement_wrap = off
|
||||||
|
ij_groovy_assignment_wrap = off
|
||||||
|
ij_groovy_binary_operation_wrap = off
|
||||||
|
ij_groovy_blank_lines_after_class_header = 0
|
||||||
|
ij_groovy_blank_lines_after_imports = 1
|
||||||
|
ij_groovy_blank_lines_after_package = 1
|
||||||
|
ij_groovy_blank_lines_around_class = 1
|
||||||
|
ij_groovy_blank_lines_around_field = 0
|
||||||
|
ij_groovy_blank_lines_around_field_in_interface = 0
|
||||||
|
ij_groovy_blank_lines_around_method = 1
|
||||||
|
ij_groovy_blank_lines_around_method_in_interface = 1
|
||||||
|
ij_groovy_blank_lines_before_imports = 1
|
||||||
|
ij_groovy_blank_lines_before_method_body = 0
|
||||||
|
ij_groovy_blank_lines_before_package = 0
|
||||||
|
ij_groovy_block_brace_style = end_of_line
|
||||||
|
ij_groovy_block_comment_at_first_column = true
|
||||||
|
ij_groovy_call_parameters_new_line_after_left_paren = false
|
||||||
|
ij_groovy_call_parameters_right_paren_on_new_line = false
|
||||||
|
ij_groovy_call_parameters_wrap = off
|
||||||
|
ij_groovy_catch_on_new_line = false
|
||||||
|
ij_groovy_class_annotation_wrap = split_into_lines
|
||||||
|
ij_groovy_class_brace_style = end_of_line
|
||||||
|
ij_groovy_class_count_to_use_import_on_demand = 5
|
||||||
|
ij_groovy_do_while_brace_force = never
|
||||||
|
ij_groovy_else_on_new_line = false
|
||||||
|
ij_groovy_enum_constants_wrap = off
|
||||||
|
ij_groovy_extends_keyword_wrap = off
|
||||||
|
ij_groovy_extends_list_wrap = off
|
||||||
|
ij_groovy_field_annotation_wrap = split_into_lines
|
||||||
|
ij_groovy_finally_on_new_line = false
|
||||||
|
ij_groovy_for_brace_force = never
|
||||||
|
ij_groovy_for_statement_new_line_after_left_paren = false
|
||||||
|
ij_groovy_for_statement_right_paren_on_new_line = false
|
||||||
|
ij_groovy_for_statement_wrap = off
|
||||||
|
ij_groovy_if_brace_force = never
|
||||||
|
ij_groovy_import_annotation_wrap = 2
|
||||||
|
ij_groovy_imports_layout = *, |, javax.**, java.**, |, $*
|
||||||
|
ij_groovy_indent_case_from_switch = true
|
||||||
|
ij_groovy_indent_label_blocks = true
|
||||||
|
ij_groovy_insert_inner_class_imports = false
|
||||||
|
ij_groovy_keep_blank_lines_before_right_brace = 2
|
||||||
|
ij_groovy_keep_blank_lines_in_code = 2
|
||||||
|
ij_groovy_keep_blank_lines_in_declarations = 2
|
||||||
|
ij_groovy_keep_control_statement_in_one_line = true
|
||||||
|
ij_groovy_keep_first_column_comment = true
|
||||||
|
ij_groovy_keep_indents_on_empty_lines = false
|
||||||
|
ij_groovy_keep_line_breaks = true
|
||||||
|
ij_groovy_keep_multiple_expressions_in_one_line = false
|
||||||
|
ij_groovy_keep_simple_blocks_in_one_line = false
|
||||||
|
ij_groovy_keep_simple_classes_in_one_line = true
|
||||||
|
ij_groovy_keep_simple_lambdas_in_one_line = true
|
||||||
|
ij_groovy_keep_simple_methods_in_one_line = true
|
||||||
|
ij_groovy_label_indent_absolute = false
|
||||||
|
ij_groovy_label_indent_size = 0
|
||||||
|
ij_groovy_lambda_brace_style = end_of_line
|
||||||
|
ij_groovy_layout_static_imports_separately = true
|
||||||
|
ij_groovy_line_comment_add_space = false
|
||||||
|
ij_groovy_line_comment_at_first_column = true
|
||||||
|
ij_groovy_method_annotation_wrap = split_into_lines
|
||||||
|
ij_groovy_method_brace_style = end_of_line
|
||||||
|
ij_groovy_method_call_chain_wrap = off
|
||||||
|
ij_groovy_method_parameters_new_line_after_left_paren = false
|
||||||
|
ij_groovy_method_parameters_right_paren_on_new_line = false
|
||||||
|
ij_groovy_method_parameters_wrap = off
|
||||||
|
ij_groovy_modifier_list_wrap = false
|
||||||
|
ij_groovy_names_count_to_use_import_on_demand = 3
|
||||||
|
ij_groovy_parameter_annotation_wrap = off
|
||||||
|
ij_groovy_parentheses_expression_new_line_after_left_paren = false
|
||||||
|
ij_groovy_parentheses_expression_right_paren_on_new_line = false
|
||||||
|
ij_groovy_prefer_parameters_wrap = false
|
||||||
|
ij_groovy_resource_list_new_line_after_left_paren = false
|
||||||
|
ij_groovy_resource_list_right_paren_on_new_line = false
|
||||||
|
ij_groovy_resource_list_wrap = off
|
||||||
|
ij_groovy_space_after_assert_separator = true
|
||||||
|
ij_groovy_space_after_colon = true
|
||||||
|
ij_groovy_space_after_comma = true
|
||||||
|
ij_groovy_space_after_comma_in_type_arguments = true
|
||||||
|
ij_groovy_space_after_for_semicolon = true
|
||||||
|
ij_groovy_space_after_quest = true
|
||||||
|
ij_groovy_space_after_type_cast = true
|
||||||
|
ij_groovy_space_before_annotation_parameter_list = false
|
||||||
|
ij_groovy_space_before_array_initializer_left_brace = false
|
||||||
|
ij_groovy_space_before_assert_separator = false
|
||||||
|
ij_groovy_space_before_catch_keyword = true
|
||||||
|
ij_groovy_space_before_catch_left_brace = true
|
||||||
|
ij_groovy_space_before_catch_parentheses = true
|
||||||
|
ij_groovy_space_before_class_left_brace = true
|
||||||
|
ij_groovy_space_before_closure_left_brace = true
|
||||||
|
ij_groovy_space_before_colon = true
|
||||||
|
ij_groovy_space_before_comma = false
|
||||||
|
ij_groovy_space_before_do_left_brace = true
|
||||||
|
ij_groovy_space_before_else_keyword = true
|
||||||
|
ij_groovy_space_before_else_left_brace = true
|
||||||
|
ij_groovy_space_before_finally_keyword = true
|
||||||
|
ij_groovy_space_before_finally_left_brace = true
|
||||||
|
ij_groovy_space_before_for_left_brace = true
|
||||||
|
ij_groovy_space_before_for_parentheses = true
|
||||||
|
ij_groovy_space_before_for_semicolon = false
|
||||||
|
ij_groovy_space_before_if_left_brace = true
|
||||||
|
ij_groovy_space_before_if_parentheses = true
|
||||||
|
ij_groovy_space_before_method_call_parentheses = false
|
||||||
|
ij_groovy_space_before_method_left_brace = true
|
||||||
|
ij_groovy_space_before_method_parentheses = false
|
||||||
|
ij_groovy_space_before_quest = true
|
||||||
|
ij_groovy_space_before_switch_left_brace = true
|
||||||
|
ij_groovy_space_before_switch_parentheses = true
|
||||||
|
ij_groovy_space_before_synchronized_left_brace = true
|
||||||
|
ij_groovy_space_before_synchronized_parentheses = true
|
||||||
|
ij_groovy_space_before_try_left_brace = true
|
||||||
|
ij_groovy_space_before_try_parentheses = true
|
||||||
|
ij_groovy_space_before_while_keyword = true
|
||||||
|
ij_groovy_space_before_while_left_brace = true
|
||||||
|
ij_groovy_space_before_while_parentheses = true
|
||||||
|
ij_groovy_space_in_named_argument = true
|
||||||
|
ij_groovy_space_in_named_argument_before_colon = false
|
||||||
|
ij_groovy_space_within_empty_array_initializer_braces = false
|
||||||
|
ij_groovy_space_within_empty_method_call_parentheses = false
|
||||||
|
ij_groovy_spaces_around_additive_operators = true
|
||||||
|
ij_groovy_spaces_around_assignment_operators = true
|
||||||
|
ij_groovy_spaces_around_bitwise_operators = true
|
||||||
|
ij_groovy_spaces_around_equality_operators = true
|
||||||
|
ij_groovy_spaces_around_lambda_arrow = true
|
||||||
|
ij_groovy_spaces_around_logical_operators = true
|
||||||
|
ij_groovy_spaces_around_multiplicative_operators = true
|
||||||
|
ij_groovy_spaces_around_regex_operators = true
|
||||||
|
ij_groovy_spaces_around_relational_operators = true
|
||||||
|
ij_groovy_spaces_around_shift_operators = true
|
||||||
|
ij_groovy_spaces_within_annotation_parentheses = false
|
||||||
|
ij_groovy_spaces_within_array_initializer_braces = false
|
||||||
|
ij_groovy_spaces_within_braces = true
|
||||||
|
ij_groovy_spaces_within_brackets = false
|
||||||
|
ij_groovy_spaces_within_cast_parentheses = false
|
||||||
|
ij_groovy_spaces_within_catch_parentheses = false
|
||||||
|
ij_groovy_spaces_within_for_parentheses = false
|
||||||
|
ij_groovy_spaces_within_gstring_injection_braces = false
|
||||||
|
ij_groovy_spaces_within_if_parentheses = false
|
||||||
|
ij_groovy_spaces_within_list_or_map = false
|
||||||
|
ij_groovy_spaces_within_method_call_parentheses = false
|
||||||
|
ij_groovy_spaces_within_method_parentheses = false
|
||||||
|
ij_groovy_spaces_within_parentheses = false
|
||||||
|
ij_groovy_spaces_within_switch_parentheses = false
|
||||||
|
ij_groovy_spaces_within_synchronized_parentheses = false
|
||||||
|
ij_groovy_spaces_within_try_parentheses = false
|
||||||
|
ij_groovy_spaces_within_tuple_expression = false
|
||||||
|
ij_groovy_spaces_within_while_parentheses = false
|
||||||
|
ij_groovy_special_else_if_treatment = true
|
||||||
|
ij_groovy_ternary_operation_wrap = off
|
||||||
|
ij_groovy_throws_keyword_wrap = off
|
||||||
|
ij_groovy_throws_list_wrap = off
|
||||||
|
ij_groovy_use_flying_geese_braces = false
|
||||||
|
ij_groovy_use_fq_class_names = false
|
||||||
|
ij_groovy_use_fq_class_names_in_javadoc = true
|
||||||
|
ij_groovy_use_relative_indents = false
|
||||||
|
ij_groovy_use_single_class_imports = true
|
||||||
|
ij_groovy_variable_annotation_wrap = off
|
||||||
|
ij_groovy_while_brace_force = never
|
||||||
|
ij_groovy_while_on_new_line = false
|
||||||
|
ij_groovy_wrap_long_lines = false
|
||||||
|
|
||||||
[{*.gradle.kts, *.kt, *.kts, *.main.kts}]
|
[{*.gradle.kts, *.kt, *.kts, *.main.kts}]
|
||||||
ij_kotlin_align_in_columns_case_branch = false
|
ij_kotlin_align_in_columns_case_branch = false
|
||||||
ij_kotlin_align_multiline_binary_operation = false
|
ij_kotlin_align_multiline_binary_operation = false
|
||||||
@ -336,8 +963,7 @@ ij_kotlin_wrap_elvis_expressions = 1
|
|||||||
ij_kotlin_wrap_expression_body_functions = 0
|
ij_kotlin_wrap_expression_body_functions = 0
|
||||||
ij_kotlin_wrap_first_method_in_call_chain = false
|
ij_kotlin_wrap_first_method_in_call_chain = false
|
||||||
|
|
||||||
|
[{*.har, *.jsb2, *.jsb3, *.json, .babelrc, .eslintrc, .stylelintrc, bowerrc, jest.config, mcmod.info}]
|
||||||
[*.json]
|
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
ij_json_keep_blank_lines_in_code = 0
|
ij_json_keep_blank_lines_in_code = 0
|
||||||
ij_json_keep_indents_on_empty_lines = false
|
ij_json_keep_indents_on_empty_lines = false
|
||||||
|
4
.gitattributes
vendored
4
.gitattributes
vendored
@ -1,4 +0,0 @@
|
|||||||
* text=auto
|
|
||||||
|
|
||||||
*.java text
|
|
||||||
*.jar binary
|
|
11
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
11
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -7,8 +7,8 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thanks for taking the time to fill out this bug report for PlotSquared! Fill out the following form to your best ability to help us fix the problem.
|
Thanks for taking the time to fill out this bug report for PlotSquared! Fill out the following form to your best ability to help us fix the problem.
|
||||||
Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.gitbook.io/plotsquared/).
|
Only use this if you're absolutely sure that you found a bug and can reproduce it. For anything else, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/).
|
||||||
Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://github.com/IntellectualSites/PlotSquared/security/policy) GitHub form!
|
Do NOT use the public issue tracker to report security vulnerabilities! They are disclosed using [this](https://forms.gle/btgdRn9yhGtzEiGW8) form!
|
||||||
|
|
||||||
- type: dropdown
|
- type: dropdown
|
||||||
attributes:
|
attributes:
|
||||||
@ -27,15 +27,10 @@ body:
|
|||||||
description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first.
|
description: Which server version version you using? If your server version is not listed, it is not supported. Update to a supported version first.
|
||||||
multiple: false
|
multiple: false
|
||||||
options:
|
options:
|
||||||
- '1.20.2'
|
|
||||||
- '1.20'
|
|
||||||
- '1.19.4'
|
|
||||||
- '1.19.3'
|
|
||||||
- '1.19.2'
|
|
||||||
- '1.19.1'
|
|
||||||
- '1.19'
|
- '1.19'
|
||||||
- '1.18.2'
|
- '1.18.2'
|
||||||
- '1.18.1'
|
- '1.18.1'
|
||||||
|
- '1.18'
|
||||||
- '1.17.1'
|
- '1.17.1'
|
||||||
- '1.16.5'
|
- '1.16.5'
|
||||||
validations:
|
validations:
|
||||||
|
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -4,5 +4,5 @@ contact_links:
|
|||||||
url: https://discord.gg/intellectualsites
|
url: https://discord.gg/intellectualsites
|
||||||
about: Our support Discord, please ask questions and seek support here.
|
about: Our support Discord, please ask questions and seek support here.
|
||||||
- name: PlotSquared Wiki
|
- name: PlotSquared Wiki
|
||||||
url: https://intellectualsites.gitbook.io/plotsquared/
|
url: https://intellectualsites.github.io/plotsquared-documentation/
|
||||||
about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands.
|
about: Take a look at the wiki page for instructions how to setup PlotSquared and use its commands.
|
||||||
|
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
2
.github/ISSUE_TEMPLATE/feature_request.yml
vendored
@ -7,7 +7,7 @@ body:
|
|||||||
attributes:
|
attributes:
|
||||||
value: |
|
value: |
|
||||||
Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added.
|
Thanks for taking the time to fill out this feature request for PlotSquared! Fill out the following form to your best ability to help us understand your feature request and greately improve the change of it getting added.
|
||||||
For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.gitbook.io/plotsquared/).
|
For anything else than a feature request, use: [our Discord server](https://discord.gg/intellectualsites) or [the wiki](https://intellectualsites.github.io/plotsquared-documentation/).
|
||||||
|
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
|
19
.github/renovate.json
vendored
19
.github/renovate.json
vendored
@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
||||||
"extends": [
|
|
||||||
"config:base",
|
|
||||||
":semanticCommitsDisabled"
|
|
||||||
],
|
|
||||||
"automerge": true,
|
|
||||||
"labels": [
|
|
||||||
"dependencies"
|
|
||||||
],
|
|
||||||
"rebaseWhen": "conflicted",
|
|
||||||
"schedule": ["on the first day of the month"],
|
|
||||||
"ignoreDeps": [
|
|
||||||
"com.google.code.gson:gson",
|
|
||||||
"com.google.guava:guava",
|
|
||||||
"org.yaml:snakeyaml",
|
|
||||||
"org.apache.logging.log4j:log4j-api",
|
|
||||||
]
|
|
||||||
}
|
|
@ -1,24 +0,0 @@
|
|||||||
name: Announce release on discord
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [ published ]
|
|
||||||
jobs:
|
|
||||||
send_announcement:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: send custom message with args
|
|
||||||
env:
|
|
||||||
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
|
|
||||||
DISCORD_USERNAME: PlotSquared Release
|
|
||||||
DISCORD_AVATAR: https://raw.githubusercontent.com/IntellectualSites/Assets/main/plugins/PlotSquared/PlotSquared.png
|
|
||||||
uses: Ilshidur/action-discord@0.3.2
|
|
||||||
with:
|
|
||||||
args: |
|
|
||||||
"<@&525015541815967744> <@&679322738552471574> <@&699293353862496266>"
|
|
||||||
""
|
|
||||||
"<:plotsquared:730750385886593039> **PlotSquared ${{ github.event.release.tag_name }} has been released!**"
|
|
||||||
""
|
|
||||||
"Click here to view changelog: https://github.com/IntellectualSites/PlotSquared/releases/tag/${{ github.event.release.tag_name }}"
|
|
||||||
""
|
|
||||||
"The download is available at:"
|
|
||||||
"- Spigot: <https://www.spigotmc.org/resources/77506/>"
|
|
21
.github/workflows/build-pr.yml
vendored
21
.github/workflows/build-pr.yml
vendored
@ -1,21 +0,0 @@
|
|||||||
name: Build PR
|
|
||||||
on: [ pull_request ]
|
|
||||||
jobs:
|
|
||||||
build_pr:
|
|
||||||
if: github.repository_owner == 'IntellectualSites'
|
|
||||||
runs-on: ${{ matrix.os }}
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
os: [ ubuntu-latest, windows-latest, macos-latest ]
|
|
||||||
steps:
|
|
||||||
- name: Checkout Repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
- name: Validate Gradle Wrapper
|
|
||||||
uses: gradle/wrapper-validation-action@v1
|
|
||||||
- name: Setup Java
|
|
||||||
uses: actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
distribution: temurin
|
|
||||||
java-version: 17
|
|
||||||
- name: Clean Build
|
|
||||||
run: ./gradlew clean build
|
|
25
.github/workflows/build.yml
vendored
25
.github/workflows/build.yml
vendored
@ -1,16 +1,15 @@
|
|||||||
name: build
|
name: build
|
||||||
on:
|
|
||||||
push:
|
on: [ pull_request, push ]
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
if: github.repository_owner == 'IntellectualSites'
|
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout Repository
|
- name: Checkout Repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
- name: Validate Gradle Wrapper
|
- name: Validate Gradle Wrapper"
|
||||||
uses: gradle/wrapper-validation-action@v1
|
uses: gradle/wrapper-validation-action@v1
|
||||||
- name: Setup Java
|
- name: Setup Java
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v3
|
||||||
@ -28,7 +27,7 @@ jobs:
|
|||||||
echo "STATUS=release" >> $GITHUB_ENV
|
echo "STATUS=release" >> $GITHUB_ENV
|
||||||
fi
|
fi
|
||||||
- name: Publish Release
|
- name: Publish Release
|
||||||
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}}
|
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}
|
||||||
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
|
run: ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
|
||||||
env:
|
env:
|
||||||
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
|
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
|
||||||
@ -36,13 +35,13 @@ jobs:
|
|||||||
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.SIGNING_KEY }}
|
ORG_GRADLE_PROJECT_signingKey: ${{ secrets.SIGNING_KEY }}
|
||||||
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.SIGNING_PASSWORD }}
|
ORG_GRADLE_PROJECT_signingPassword: ${{ secrets.SIGNING_PASSWORD }}
|
||||||
- name: Publish Snapshot
|
- name: Publish Snapshot
|
||||||
if: ${{ runner.os == 'Linux' && env.STATUS != 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
if: ${{ runner.os == 'Linux' && env.STATUS != 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6' }}
|
||||||
run: ./gradlew publishToSonatype
|
run: ./gradlew publishToSonatype
|
||||||
env:
|
env:
|
||||||
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
|
ORG_GRADLE_PROJECT_sonatypeUsername: ${{ secrets.SONATYPE_USERNAME }}
|
||||||
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
|
ORG_GRADLE_PROJECT_sonatypePassword: ${{ secrets.SONATYPE_PASSWORD }}
|
||||||
- name: Publish core javadoc
|
- name: Publish core javadoc
|
||||||
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}}
|
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}
|
||||||
uses: cpina/github-action-push-to-another-repository@main
|
uses: cpina/github-action-push-to-another-repository@main
|
||||||
env:
|
env:
|
||||||
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
||||||
@ -52,9 +51,9 @@ jobs:
|
|||||||
destination-repository-name: 'plotsquared-javadocs'
|
destination-repository-name: 'plotsquared-javadocs'
|
||||||
user-email: ${{ secrets.USER_EMAIL }}
|
user-email: ${{ secrets.USER_EMAIL }}
|
||||||
target-branch: main
|
target-branch: main
|
||||||
target-directory: v7/core
|
target-directory: core
|
||||||
- name: Publish bukkit javadoc
|
- name: Publish bukkit javadoc
|
||||||
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/main'}}
|
if: ${{ runner.os == 'Linux' && env.STATUS == 'release' && github.event_name == 'push' && github.ref == 'refs/heads/v6'}}
|
||||||
uses: cpina/github-action-push-to-another-repository@main
|
uses: cpina/github-action-push-to-another-repository@main
|
||||||
env:
|
env:
|
||||||
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
SSH_DEPLOY_KEY: ${{ secrets.SSH_DEPLOY_KEY }}
|
||||||
@ -64,4 +63,4 @@ jobs:
|
|||||||
destination-repository-name: 'plotsquared-javadocs'
|
destination-repository-name: 'plotsquared-javadocs'
|
||||||
user-email: ${{ secrets.USER_EMAIL }}
|
user-email: ${{ secrets.USER_EMAIL }}
|
||||||
target-branch: main
|
target-branch: main
|
||||||
target-directory: v7/bukkit
|
target-directory: bukkit
|
||||||
|
17
.github/workflows/codeql.yml
vendored
17
.github/workflows/codeql.yml
vendored
@ -1,10 +1,11 @@
|
|||||||
name: "CodeQL"
|
name: "CodeQL"
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ main ]
|
branches: [ v6 ]
|
||||||
pull_request:
|
pull_request:
|
||||||
# The branches below must be a subset of the branches above
|
# The branches below must be a subset of the branches above
|
||||||
branches: [ main ]
|
branches: [ v6 ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
analyze:
|
analyze:
|
||||||
@ -14,23 +15,23 @@ jobs:
|
|||||||
actions: read
|
actions: read
|
||||||
contents: read
|
contents: read
|
||||||
security-events: write
|
security-events: write
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
language: [ 'java' ]
|
language: [ 'java' ]
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
- name: Setup Java
|
|
||||||
uses: actions/setup-java@v3
|
|
||||||
with:
|
|
||||||
distribution: temurin
|
|
||||||
java-version: 17
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v2
|
uses: github/codeql-action/init@v2
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
|
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v2
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v2
|
uses: github/codeql-action/analyze@v2
|
||||||
|
4
.github/workflows/release-drafter.yml
vendored
4
.github/workflows/release-drafter.yml
vendored
@ -1,12 +1,14 @@
|
|||||||
name: draft release
|
name: draft release
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- main
|
- v6
|
||||||
pull_request:
|
pull_request:
|
||||||
types: [ opened, reopened, synchronize ]
|
types: [ opened, reopened, synchronize ]
|
||||||
pull_request_target:
|
pull_request_target:
|
||||||
types: [ opened, reopened, synchronize ]
|
types: [ opened, reopened, synchronize ]
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
update_release_draft:
|
update_release_draft:
|
||||||
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -137,6 +137,3 @@ docs/
|
|||||||
build/
|
build/
|
||||||
|
|
||||||
.DS_Store
|
.DS_Store
|
||||||
# Ignore run folders
|
|
||||||
run-[0-9].[0-9][0-9]/
|
|
||||||
run-[0-9].[0-9][0-9].[0-9]/
|
|
||||||
|
154
.idea/icon.svg
generated
154
.idea/icon.svg
generated
@ -1,144 +1,48 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<svg
|
<svg xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" version="1.1" id="svg2" xml:space="preserve" width="4000" height="3333.3333" viewBox="0 0 4000 3333.3333" sodipodi:docname="PlotSquared.ai">
|
||||||
version="1.1"
|
<metadata id="metadata8">
|
||||||
id="svg2"
|
|
||||||
xml:space="preserve"
|
|
||||||
width="512"
|
|
||||||
height="512"
|
|
||||||
viewBox="0 0 512 512.00001"
|
|
||||||
sodipodi:docname="icon.svg"
|
|
||||||
inkscape:version="1.1.2 (b8e25be8, 2022-02-05)"
|
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/">
|
|
||||||
<metadata
|
|
||||||
id="metadata8">
|
|
||||||
<rdf:RDF>
|
<rdf:RDF>
|
||||||
<cc:Work
|
<cc:Work rdf:about="">
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
<dc:format>image/svg+xml</dc:format>
|
||||||
<dc:type
|
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
</cc:Work>
|
</cc:Work>
|
||||||
</rdf:RDF>
|
</rdf:RDF>
|
||||||
</metadata>
|
</metadata>
|
||||||
<defs
|
<defs id="defs6">
|
||||||
id="defs6">
|
<clipPath clipPathUnits="userSpaceOnUse" id="clipPath18">
|
||||||
<clipPath
|
<path d="M 0,2500 H 3000 V 0 H 0 Z" id="path16" />
|
||||||
clipPathUnits="userSpaceOnUse"
|
|
||||||
id="clipPath18">
|
|
||||||
<path
|
|
||||||
d="M 0,2500 H 3000 V 0 H 0 Z"
|
|
||||||
id="path16" />
|
|
||||||
</clipPath>
|
</clipPath>
|
||||||
</defs>
|
</defs>
|
||||||
<sodipodi:namedview
|
<sodipodi:namedview pagecolor="#ffffff" bordercolor="#666666" borderopacity="1" objecttolerance="10" gridtolerance="10" guidetolerance="10" inkscape:pageopacity="0" inkscape:pageshadow="2" inkscape:window-width="640" inkscape:window-height="480" id="namedview4" />
|
||||||
pagecolor="#ffffff"
|
<g id="g10" inkscape:groupmode="layer" inkscape:label="PlotSquared" transform="matrix(1.3333333,0,0,-1.3333333,0,3333.3333)">
|
||||||
bordercolor="#666666"
|
<g id="g12">
|
||||||
borderopacity="1"
|
<g id="g14" clip-path="url(#clipPath18)">
|
||||||
objecttolerance="10"
|
<g id="g20" transform="translate(1486.1511,2242.6453)">
|
||||||
gridtolerance="10"
|
<path d="m 0,0 c 16.533,10.846 33.211,21.453 50.104,31.699 78.972,-48.281 153.985,-102.704 227.269,-159.144 148.61,-115.422 287.884,-243.01 414.393,-382.333 111.39,-122.861 212.751,-255.152 298.898,-396.971 52.744,-87.322 100.544,-177.884 139.514,-272.214 -11.638,-3.551 -23.108,-7.655 -34.362,-12.286 l -0.24,0.288 c -11.135,12.982 -24.141,24.212 -34.915,37.506 -22.557,23.013 -45.425,45.737 -68.03,68.678 -19.725,20.253 -40.601,39.45 -58.958,60.974 -36.355,36.451 -72.517,73.093 -108.944,109.471 -22.628,26.013 -48.064,49.385 -71.965,74.197 -19.029,19.485 -38.706,38.346 -57.519,57.999 -12.166,14.998 -26.684,27.716 -39.93,41.658 -27.668,27.524 -54.903,55.479 -82.571,82.979 -23.924,27.956 -51.664,52.264 -76.692,79.164 -4.68,4.487 -8.855,10.774 -15.886,11.326 -22.34,34.027 -58.311,57.327 -97.377,67.502 -104.312,99.153 -215.487,191.202 -332.661,274.782 -117.942,-83.94 -229.476,-176.781 -334.484,-276.39 -26.684,-0.024 -53.368,0.024 -80.076,-0.024 0.024,-26.564 0.048,-53.104 0,-79.668 -72.229,-73.021 -139.491,-150.937 -202.385,-232.092 -63.758,-82.619 -121.973,-169.51 -173.541,-260.264 131.932,-69.061 257.864,-149.521 375.926,-240.275 0.096,-26.444 -0.12,-52.888 0.096,-79.332 l 0.744,-0.984 c 20.109,-24.14 43.409,-45.233 65.126,-67.861 15.118,-15.382 30.571,-30.404 45.569,-45.881 17.565,-20.733 37.698,-39.042 56.607,-58.503 19.917,-20.781 41.25,-40.218 59.967,-62.151 29.156,-29.299 58.167,-58.815 87.515,-87.922 29.155,-33.043 61.502,-63.111 92.169,-94.738 13.726,-12.67 25.124,-27.571 38.634,-40.457 25.029,-25.365 50.129,-50.657 75.325,-75.853 -37.914,-51.208 -73.741,-103.952 -107.192,-158.183 -167.83,273.317 -397.235,507.305 -662.37,687.158 -81.875,55.335 -167.23,105.584 -255.681,149.641 -52.815,26.276 -106.831,50.248 -162.239,70.381 99.393,233.628 242.795,446.715 410.289,636.79 93.562,106.088 194.634,205.433 301.466,298.13 C -217.335,-155.808 -111.439,-73.789 0,0" style="fill:#062f4c;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path22" />
|
||||||
guidetolerance="10"
|
|
||||||
inkscape:pageopacity="0"
|
|
||||||
inkscape:pageshadow="2"
|
|
||||||
inkscape:window-width="1440"
|
|
||||||
inkscape:window-height="900"
|
|
||||||
id="namedview4"
|
|
||||||
inkscape:pagecheckerboard="0"
|
|
||||||
showgrid="false"
|
|
||||||
inkscape:zoom="0.1632"
|
|
||||||
inkscape:cx="1087.6225"
|
|
||||||
inkscape:cy="1666.6666"
|
|
||||||
inkscape:window-x="0"
|
|
||||||
inkscape:window-y="0"
|
|
||||||
inkscape:window-maximized="0"
|
|
||||||
inkscape:current-layer="g10" />
|
|
||||||
<g
|
|
||||||
id="g10"
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
inkscape:label="PlotSquared"
|
|
||||||
transform="matrix(1.3333333,0,0,-1.3333333,0,3333.3333)">
|
|
||||||
<g
|
|
||||||
id="g12"
|
|
||||||
transform="matrix(0.16955078,0,0,0.16955078,-68.456969,2101.8529)">
|
|
||||||
<g
|
|
||||||
id="g14"
|
|
||||||
clip-path="url(#clipPath18)">
|
|
||||||
<g
|
|
||||||
id="g20"
|
|
||||||
transform="translate(1486.1511,2242.6453)">
|
|
||||||
<path
|
|
||||||
d="m 0,0 c 16.533,10.846 33.211,21.453 50.104,31.699 78.972,-48.281 153.985,-102.704 227.269,-159.144 148.61,-115.422 287.884,-243.01 414.393,-382.333 111.39,-122.861 212.751,-255.152 298.898,-396.971 52.744,-87.322 100.544,-177.884 139.514,-272.214 -11.638,-3.551 -23.108,-7.655 -34.362,-12.286 l -0.24,0.288 c -11.135,12.982 -24.141,24.212 -34.915,37.506 -22.557,23.013 -45.425,45.737 -68.03,68.678 -19.725,20.253 -40.601,39.45 -58.958,60.974 -36.355,36.451 -72.517,73.093 -108.944,109.471 -22.628,26.013 -48.064,49.385 -71.965,74.197 -19.029,19.485 -38.706,38.346 -57.519,57.999 -12.166,14.998 -26.684,27.716 -39.93,41.658 -27.668,27.524 -54.903,55.479 -82.571,82.979 -23.924,27.956 -51.664,52.264 -76.692,79.164 -4.68,4.487 -8.855,10.774 -15.886,11.326 -22.34,34.027 -58.311,57.327 -97.377,67.502 -104.312,99.153 -215.487,191.202 -332.661,274.782 -117.942,-83.94 -229.476,-176.781 -334.484,-276.39 -26.684,-0.024 -53.368,0.024 -80.076,-0.024 0.024,-26.564 0.048,-53.104 0,-79.668 -72.229,-73.021 -139.491,-150.937 -202.385,-232.092 -63.758,-82.619 -121.973,-169.51 -173.541,-260.264 131.932,-69.061 257.864,-149.521 375.926,-240.275 0.096,-26.444 -0.12,-52.888 0.096,-79.332 l 0.744,-0.984 c 20.109,-24.14 43.409,-45.233 65.126,-67.861 15.118,-15.382 30.571,-30.404 45.569,-45.881 17.565,-20.733 37.698,-39.042 56.607,-58.503 19.917,-20.781 41.25,-40.218 59.967,-62.151 29.156,-29.299 58.167,-58.815 87.515,-87.922 29.155,-33.043 61.502,-63.111 92.169,-94.738 13.726,-12.67 25.124,-27.571 38.634,-40.457 25.029,-25.365 50.129,-50.657 75.325,-75.853 -37.914,-51.208 -73.741,-103.952 -107.192,-158.183 -167.83,273.317 -397.235,507.305 -662.37,687.158 -81.875,55.335 -167.23,105.584 -255.681,149.641 -52.815,26.276 -106.831,50.248 -162.239,70.381 99.393,233.628 242.795,446.715 410.289,636.79 93.562,106.088 194.634,205.433 301.466,298.13 C -217.335,-155.808 -111.439,-73.789 0,0"
|
|
||||||
style="fill:#062f4c;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
||||||
id="path22" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g id="g24" transform="translate(1201.7948,1741.5303)">
|
||||||
id="g24"
|
<path d="M 0,0 C 105.008,99.609 216.543,192.45 334.485,276.39 451.659,192.81 562.833,100.76 667.146,1.608 c -34.987,8.83 -71.51,9.718 -107.264,6.431 -41.202,-4.296 -82.907,-19.077 -112.543,-48.953 -33.019,-32.155 -49.456,-77.604 -55.311,-122.501 -28.124,27.908 -56.104,55.983 -84.035,84.083 -2.976,2.976 -6.839,4.823 -10.391,6.911 -19.029,26.348 -45.953,46.673 -76.62,57.495 C 187.555,-2.472 151.513,-0.12 116.166,0 Z" style="fill:#4c8fcc;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path26" />
|
||||||
transform="translate(1201.7948,1741.5303)">
|
|
||||||
<path
|
|
||||||
d="M 0,0 C 105.008,99.609 216.543,192.45 334.485,276.39 451.659,192.81 562.833,100.76 667.146,1.608 c -34.987,8.83 -71.51,9.718 -107.264,6.431 -41.202,-4.296 -82.907,-19.077 -112.543,-48.953 -33.019,-32.155 -49.456,-77.604 -55.311,-122.501 -28.124,27.908 -56.104,55.983 -84.035,84.083 -2.976,2.976 -6.839,4.823 -10.391,6.911 -19.029,26.348 -45.953,46.673 -76.62,57.495 C 187.555,-2.472 151.513,-0.12 116.166,0 Z"
|
|
||||||
style="fill:#4c8fcc;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
||||||
id="path26" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g id="g28" transform="translate(919.3342,1429.7462)">
|
||||||
id="g28"
|
<path d="m 0,0 c 62.894,81.156 130.156,159.072 202.385,232.092 0.048,-244.21 0.024,-488.421 0,-732.631 C 84.323,-409.785 -41.61,-329.325 -173.541,-260.264 -121.973,-169.51 -63.758,-82.619 0,0" style="fill:#4c8fcc;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path30" />
|
||||||
transform="translate(919.3342,1429.7462)">
|
|
||||||
<path
|
|
||||||
d="m 0,0 c 62.894,81.156 130.156,159.072 202.385,232.092 0.048,-244.21 0.024,-488.421 0,-732.631 C 84.323,-409.785 -41.61,-329.325 -173.541,-260.264 -121.973,-169.51 -63.758,-82.619 0,0"
|
|
||||||
style="fill:#4c8fcc;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
||||||
id="path30" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g id="g32" transform="translate(1649.134,1700.6166)">
|
||||||
id="g32"
|
<path d="m 0,0 c 29.635,29.875 71.341,44.657 112.543,48.952 35.754,3.288 72.277,2.4 107.263,-6.431 39.066,-10.174 75.037,-33.474 97.377,-67.501 11.879,-17.661 20.181,-37.411 26.42,-57.687 10.871,-38.802 11.95,-79.356 11.446,-119.358 -44.345,-0.072 -88.69,0.048 -133.035,-0.072 -1.032,30.907 3.263,63.686 -10.175,92.626 -9.526,20.325 -32.107,31.243 -53.751,32.131 -21.453,1.44 -45.065,-4.32 -59.175,-21.597 -12.79,-15.861 -15.382,-37.002 -16.558,-56.655 -1.295,-29.132 3.696,-59.031 17.518,-84.923 16.821,-30.619 39.378,-57.783 64.526,-81.9 31.387,-32.634 67.501,-60.374 97.857,-94.041 27.332,-28.988 51.256,-61.479 68.005,-97.785 20.541,-41.13 26.972,-87.827 25.82,-133.372 -0.912,-32.107 -5.231,-64.406 -16.149,-94.737 -11.59,-31.699 -31.123,-61.047 -58.335,-81.371 -25.124,-19.125 -55.696,-29.852 -86.651,-34.771 -49.552,-6.743 -101.888,-4.847 -148.465,14.854 -35.227,14.829 -64.238,42.689 -81.708,76.548 -20.996,40.242 -27.115,86.339 -27.259,131.212 0.048,17.829 0,35.658 0.048,53.463 44.345,0.048 88.69,-0.023 133.059,0.048 1.728,-35.538 -4.055,-72.06 5.663,-106.807 5.783,-22.173 26.204,-37.794 48.185,-41.754 20.733,-3.431 43.577,-2.015 61.622,9.791 15.502,9.43 23.949,26.78 26.78,44.225 5.903,35.922 1.872,74.293 -15.381,106.688 -16.918,30.595 -39.474,57.711 -64.55,81.899 -33.187,34.099 -71.173,63.254 -102.585,99.081 -26.756,28.867 -49.408,61.646 -65.486,97.641 -24.572,52.48 -26.731,112.422 -20.18,169.102 C -49.456,-77.604 -33.019,-32.155 0,0" style="fill:#feeeee;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path34" />
|
||||||
transform="translate(1649.134,1700.6166)">
|
|
||||||
<path
|
|
||||||
d="m 0,0 c 29.635,29.875 71.341,44.657 112.543,48.952 35.754,3.288 72.277,2.4 107.263,-6.431 39.066,-10.174 75.037,-33.474 97.377,-67.501 11.879,-17.661 20.181,-37.411 26.42,-57.687 10.871,-38.802 11.95,-79.356 11.446,-119.358 -44.345,-0.072 -88.69,0.048 -133.035,-0.072 -1.032,30.907 3.263,63.686 -10.175,92.626 -9.526,20.325 -32.107,31.243 -53.751,32.131 -21.453,1.44 -45.065,-4.32 -59.175,-21.597 -12.79,-15.861 -15.382,-37.002 -16.558,-56.655 -1.295,-29.132 3.696,-59.031 17.518,-84.923 16.821,-30.619 39.378,-57.783 64.526,-81.9 31.387,-32.634 67.501,-60.374 97.857,-94.041 27.332,-28.988 51.256,-61.479 68.005,-97.785 20.541,-41.13 26.972,-87.827 25.82,-133.372 -0.912,-32.107 -5.231,-64.406 -16.149,-94.737 -11.59,-31.699 -31.123,-61.047 -58.335,-81.371 -25.124,-19.125 -55.696,-29.852 -86.651,-34.771 -49.552,-6.743 -101.888,-4.847 -148.465,14.854 -35.227,14.829 -64.238,42.689 -81.708,76.548 -20.996,40.242 -27.115,86.339 -27.259,131.212 0.048,17.829 0,35.658 0.048,53.463 44.345,0.048 88.69,-0.023 133.059,0.048 1.728,-35.538 -4.055,-72.06 5.663,-106.807 5.783,-22.173 26.204,-37.794 48.185,-41.754 20.733,-3.431 43.577,-2.015 61.622,9.791 15.502,9.43 23.949,26.78 26.78,44.225 5.903,35.922 1.872,74.293 -15.381,106.688 -16.918,30.595 -39.474,57.711 -64.55,81.899 -33.187,34.099 -71.173,63.254 -102.585,99.081 -26.756,28.867 -49.408,61.646 -65.486,97.641 -24.572,52.48 -26.731,112.422 -20.18,169.102 C -49.456,-77.604 -33.019,-32.155 0,0"
|
|
||||||
style="fill:#feeeee;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
||||||
id="path34" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g id="g36" transform="translate(1262.7214,1613.126)">
|
||||||
id="g36"
|
<path d="m 0,0 v -301.13 c 23.204,0.024 46.409,-0.048 69.613,0.024 18.525,0.288 38.202,6.575 50.153,21.429 12.43,17.277 13.917,39.522 14.613,60.111 0.024,43.985 -0.048,87.994 0.024,131.979 -0.48,23.637 -0.983,50.369 -17.277,69.23 C 104.864,-5.711 86.867,-0.24 69.589,0 46.385,0.048 23.204,0.024 0,0 m -141.002,128.38 c 26.708,0.048 53.392,0 80.075,0.024 H 55.24 c 35.346,-0.12 71.389,-2.471 104.815,-14.925 30.668,-10.823 57.592,-31.148 76.621,-57.496 26.852,-39.09 36.69,-87.202 38.058,-133.947 0.024,-48.833 0.096,-97.689 -0.024,-146.521 -1.728,-47.993 -11.974,-97.953 -41.514,-136.971 -22.748,-30.644 -57.495,-50.801 -94.281,-59.583 -45.377,-11.878 -92.578,-6.791 -138.891,-7.847 -0.072,-111.799 0,-223.574 -0.024,-335.373 -13.942,0 -27.86,0.024 -41.778,-0.024 -32.802,0.072 -65.605,0 -98.384,0.048 l -0.744,0.984 c -0.216,26.444 0,52.888 -0.096,79.332 0.024,244.211 0.048,488.421 0,732.632 0.048,26.563 0.024,53.103 0,79.667" style="fill:#feeeee;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path38" />
|
||||||
transform="translate(1262.7214,1613.126)">
|
|
||||||
<path
|
|
||||||
d="m 0,0 v -301.13 c 23.204,0.024 46.409,-0.048 69.613,0.024 18.525,0.288 38.202,6.575 50.153,21.429 12.43,17.277 13.917,39.522 14.613,60.111 0.024,43.985 -0.048,87.994 0.024,131.979 -0.48,23.637 -0.983,50.369 -17.277,69.23 C 104.864,-5.711 86.867,-0.24 69.589,0 46.385,0.048 23.204,0.024 0,0 m -141.002,128.38 c 26.708,0.048 53.392,0 80.075,0.024 H 55.24 c 35.346,-0.12 71.389,-2.471 104.815,-14.925 30.668,-10.823 57.592,-31.148 76.621,-57.496 26.852,-39.09 36.69,-87.202 38.058,-133.947 0.024,-48.833 0.096,-97.689 -0.024,-146.521 -1.728,-47.993 -11.974,-97.953 -41.514,-136.971 -22.748,-30.644 -57.495,-50.801 -94.281,-59.583 -45.377,-11.878 -92.578,-6.791 -138.891,-7.847 -0.072,-111.799 0,-223.574 -0.024,-335.373 -13.942,0 -27.86,0.024 -41.778,-0.024 -32.802,0.072 -65.605,0 -98.384,0.048 l -0.744,0.984 c -0.216,26.444 0,52.888 -0.096,79.332 0.024,244.211 0.048,488.421 0,732.632 0.048,26.563 0.024,53.103 0,79.667"
|
|
||||||
style="fill:#feeeee;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
||||||
id="path38" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g id="g40" transform="translate(1966.3174,1675.6364)">
|
||||||
id="g40"
|
<path d="m 0,0 c 7.031,-0.552 11.206,-6.839 15.885,-11.326 25.029,-26.9 52.768,-51.208 76.693,-79.164 27.667,-27.5 54.903,-55.456 82.571,-82.979 13.246,-13.942 27.764,-26.66 39.93,-41.658 18.813,-19.653 38.49,-38.514 57.519,-57.999 23.9,-24.812 49.337,-48.185 71.965,-74.197 36.427,-36.378 72.589,-73.02 108.943,-109.471 18.358,-21.524 39.234,-40.722 58.959,-60.974 22.605,-22.941 45.473,-45.665 68.03,-68.678 10.774,-13.294 23.78,-24.524 34.914,-37.506 -103.904,-41.97 -203.488,-94.114 -298.922,-152.761 -246.994,-152.28 -466.224,-350.298 -639.333,-583.398 -25.197,25.196 -50.297,50.488 -75.325,75.852 -13.51,12.886 -24.908,27.788 -38.634,40.458 -30.667,31.627 -63.014,61.695 -92.17,94.738 -29.347,29.107 -58.359,58.623 -87.514,87.922 -18.717,21.933 -40.05,41.37 -59.967,62.151 -18.909,19.461 -39.042,37.77 -56.607,58.503 -14.998,15.477 -30.452,30.499 -45.569,45.88 -21.717,22.629 -45.017,43.722 -65.126,67.862 32.779,-0.048 65.582,0.024 98.384,-0.048 114.391,-98.097 220.407,-205.984 315.384,-322.99 92.914,114.318 196.242,220.022 307.753,316.271 30.955,4.919 61.526,15.646 86.65,34.771 27.212,20.325 46.745,49.672 58.335,81.371 107.312,77.988 219.327,149.929 337.509,210.376 -35.299,64.67 -75.829,126.437 -118.254,186.643 C 176.253,-228.037 104.24,-140.115 26.42,-57.687 20.181,-37.41 11.878,-17.661 0,0" style="fill:#042338;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path42" />
|
||||||
transform="translate(1966.3174,1675.6364)">
|
|
||||||
<path
|
|
||||||
d="m 0,0 c 7.031,-0.552 11.206,-6.839 15.885,-11.326 25.029,-26.9 52.768,-51.208 76.693,-79.164 27.667,-27.5 54.903,-55.456 82.571,-82.979 13.246,-13.942 27.764,-26.66 39.93,-41.658 18.813,-19.653 38.49,-38.514 57.519,-57.999 23.9,-24.812 49.337,-48.185 71.965,-74.197 36.427,-36.378 72.589,-73.02 108.943,-109.471 18.358,-21.524 39.234,-40.722 58.959,-60.974 22.605,-22.941 45.473,-45.665 68.03,-68.678 10.774,-13.294 23.78,-24.524 34.914,-37.506 -103.904,-41.97 -203.488,-94.114 -298.922,-152.761 -246.994,-152.28 -466.224,-350.298 -639.333,-583.398 -25.197,25.196 -50.297,50.488 -75.325,75.852 -13.51,12.886 -24.908,27.788 -38.634,40.458 -30.667,31.627 -63.014,61.695 -92.17,94.738 -29.347,29.107 -58.359,58.623 -87.514,87.922 -18.717,21.933 -40.05,41.37 -59.967,62.151 -18.909,19.461 -39.042,37.77 -56.607,58.503 -14.998,15.477 -30.452,30.499 -45.569,45.88 -21.717,22.629 -45.017,43.722 -65.126,67.862 32.779,-0.048 65.582,0.024 98.384,-0.048 114.391,-98.097 220.407,-205.984 315.384,-322.99 92.914,114.318 196.242,220.022 307.753,316.271 30.955,4.919 61.526,15.646 86.65,34.771 27.212,20.325 46.745,49.672 58.335,81.371 107.312,77.988 219.327,149.929 337.509,210.376 -35.299,64.67 -75.829,126.437 -118.254,186.643 C 176.253,-228.037 104.24,-140.115 26.42,-57.687 20.181,-37.41 11.878,-17.661 0,0"
|
|
||||||
style="fill:#042338;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
||||||
id="path42" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g id="g44" transform="translate(1499.3971,1669.1094)">
|
||||||
id="g44"
|
<path d="m 0,0 c 3.551,-2.088 7.415,-3.935 10.39,-6.911 27.932,-28.1 55.912,-56.175 84.036,-84.083 -6.551,-56.679 -4.392,-116.622 20.18,-169.102 16.078,-35.994 38.73,-68.774 65.486,-97.641 31.412,-35.826 69.398,-64.982 102.585,-99.081 25.076,-24.188 47.632,-51.304 64.55,-81.899 17.253,-32.395 21.284,-70.765 15.381,-106.688 -2.831,-17.445 -11.278,-34.794 -26.78,-44.225 -18.045,-11.806 -40.889,-13.222 -61.622,-9.79 -21.981,3.959 -42.402,19.58 -48.185,41.753 -9.718,34.747 -3.935,71.269 -5.663,106.808 -44.369,-0.072 -88.714,0 -133.059,-0.048 -0.048,-17.806 0,-35.635 -0.048,-53.464 0.144,-44.873 6.263,-90.97 27.259,-131.212 17.47,-33.859 46.481,-61.718 81.708,-76.548 46.577,-19.701 98.913,-21.597 148.465,-14.854 -111.511,-96.249 -214.839,-201.953 -307.753,-316.271 -94.977,117.006 -200.993,224.893 -315.383,322.99 13.918,0.048 27.836,0.024 41.777,0.024 0.024,111.799 -0.048,223.574 0.024,335.372 46.313,1.056 93.514,-4.031 138.891,7.847 36.786,8.783 71.533,28.94 94.282,59.583 29.539,39.018 39.785,88.978 41.513,136.971 0.12,48.833 0.048,97.689 0.024,146.522 C 36.69,-87.203 26.852,-39.09 0,0" style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path46" />
|
||||||
transform="translate(1499.3971,1669.1094)">
|
|
||||||
<path
|
|
||||||
d="m 0,0 c 3.551,-2.088 7.415,-3.935 10.39,-6.911 27.932,-28.1 55.912,-56.175 84.036,-84.083 -6.551,-56.679 -4.392,-116.622 20.18,-169.102 16.078,-35.994 38.73,-68.774 65.486,-97.641 31.412,-35.826 69.398,-64.982 102.585,-99.081 25.076,-24.188 47.632,-51.304 64.55,-81.899 17.253,-32.395 21.284,-70.765 15.381,-106.688 -2.831,-17.445 -11.278,-34.794 -26.78,-44.225 -18.045,-11.806 -40.889,-13.222 -61.622,-9.79 -21.981,3.959 -42.402,19.58 -48.185,41.753 -9.718,34.747 -3.935,71.269 -5.663,106.808 -44.369,-0.072 -88.714,0 -133.059,-0.048 -0.048,-17.806 0,-35.635 -0.048,-53.464 0.144,-44.873 6.263,-90.97 27.259,-131.212 17.47,-33.859 46.481,-61.718 81.708,-76.548 46.577,-19.701 98.913,-21.597 148.465,-14.854 -111.511,-96.249 -214.839,-201.953 -307.753,-316.271 -94.977,117.006 -200.993,224.893 -315.383,322.99 13.918,0.048 27.836,0.024 41.777,0.024 0.024,111.799 -0.048,223.574 0.024,335.372 46.313,1.056 93.514,-4.031 138.891,7.847 36.786,8.783 71.533,28.94 94.282,59.583 29.539,39.018 39.785,88.978 41.513,136.971 0.12,48.833 0.048,97.689 0.024,146.522 C 36.69,-87.203 26.852,-39.09 0,0"
|
|
||||||
style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
||||||
id="path46" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g id="g48" transform="translate(1748.0469,1601.6797)">
|
||||||
id="g48"
|
<path d="M 0,0 C 14.11,17.277 37.722,23.036 59.175,21.597 80.82,20.709 103.4,9.791 112.927,-10.534 c 13.438,-28.94 9.142,-61.719 10.174,-92.626 44.345,0.12 88.691,0 133.036,0.072 0.504,40.002 -0.576,80.556 -11.447,119.358 77.82,-82.428 149.833,-170.35 215.583,-262.664 42.426,-60.207 82.956,-121.973 118.254,-186.643 -118.182,-60.447 -230.196,-132.388 -337.508,-210.376 10.918,30.331 15.238,62.63 16.149,94.737 1.152,45.545 -5.279,92.242 -25.82,133.372 -16.749,36.306 -40.673,68.797 -68.005,97.785 -30.355,33.667 -66.47,61.406 -97.857,94.041 -25.148,24.117 -47.705,51.28 -64.526,81.9 -13.822,25.892 -18.813,55.791 -17.517,84.923 C -15.382,-37.002 -12.79,-15.862 0,0" style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path50" />
|
||||||
transform="translate(1748.0469,1601.6797)">
|
|
||||||
<path
|
|
||||||
d="M 0,0 C 14.11,17.277 37.722,23.036 59.175,21.597 80.82,20.709 103.4,9.791 112.927,-10.534 c 13.438,-28.94 9.142,-61.719 10.174,-92.626 44.345,0.12 88.691,0 133.036,0.072 0.504,40.002 -0.576,80.556 -11.447,119.358 77.82,-82.428 149.833,-170.35 215.583,-262.664 42.426,-60.207 82.956,-121.973 118.254,-186.643 -118.182,-60.447 -230.196,-132.388 -337.508,-210.376 10.918,30.331 15.238,62.63 16.149,94.737 1.152,45.545 -5.279,92.242 -25.82,133.372 -16.749,36.306 -40.673,68.797 -68.005,97.785 -30.355,33.667 -66.47,61.406 -97.857,94.041 -25.148,24.117 -47.705,51.28 -64.526,81.9 -13.822,25.892 -18.813,55.791 -17.517,84.923 C -15.382,-37.002 -12.79,-15.862 0,0"
|
|
||||||
style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
||||||
id="path50" />
|
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g id="g52" transform="translate(1262.7214,1613.126)">
|
||||||
id="g52"
|
<path d="m 0,0 c 23.204,0.024 46.385,0.048 69.589,0 17.278,-0.24 35.275,-5.711 47.537,-18.357 16.294,-18.861 16.797,-45.593 17.277,-69.23 -0.072,-43.985 0,-87.994 -0.024,-131.979 -0.696,-20.589 -2.183,-42.834 -14.613,-60.111 -11.951,-14.854 -31.628,-21.141 -50.153,-21.429 -23.204,-0.072 -46.409,0 -69.613,-0.024 z" style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none" id="path54" />
|
||||||
transform="translate(1262.7214,1613.126)">
|
|
||||||
<path
|
|
||||||
d="m 0,0 c 23.204,0.024 46.385,0.048 69.589,0 17.278,-0.24 35.275,-5.711 47.537,-18.357 16.294,-18.861 16.797,-45.593 17.277,-69.23 -0.072,-43.985 0,-87.994 -0.024,-131.979 -0.696,-20.589 -2.183,-42.834 -14.613,-60.111 -11.951,-14.854 -31.628,-21.141 -50.153,-21.429 -23.204,-0.072 -46.409,0 -69.613,-0.024 z"
|
|
||||||
style="fill:#1c72ba;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
|
||||||
id="path54" />
|
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
</g>
|
</g>
|
||||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 11 KiB |
@ -21,20 +21,20 @@ dependencies {
|
|||||||
api(projects.plotsquaredCore)
|
api(projects.plotsquaredCore)
|
||||||
|
|
||||||
// Metrics
|
// Metrics
|
||||||
implementation(libs.bstatsBukkit)
|
implementation("org.bstats:bstats-bukkit")
|
||||||
|
|
||||||
// Paper
|
// Paper
|
||||||
compileOnly(libs.paper)
|
compileOnly(libs.paper)
|
||||||
implementation(libs.paperlib)
|
implementation("io.papermc:paperlib")
|
||||||
|
|
||||||
// Plugins
|
// Plugins
|
||||||
compileOnly(libs.worldeditBukkit) {
|
compileOnly(libs.worldeditBukkit) {
|
||||||
exclude(group = "org.bukkit")
|
exclude(group = "org.bukkit")
|
||||||
exclude(group = "org.spigotmc")
|
exclude(group = "org.spigotmc")
|
||||||
}
|
}
|
||||||
compileOnly(libs.faweBukkit) { isTransitive = false }
|
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
|
||||||
testImplementation(libs.faweBukkit) { isTransitive = false }
|
testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Bukkit") { isTransitive = false }
|
||||||
compileOnly(libs.vault) {
|
compileOnly("com.github.MilkBowl:VaultAPI") {
|
||||||
exclude(group = "org.bukkit")
|
exclude(group = "org.bukkit")
|
||||||
}
|
}
|
||||||
compileOnly(libs.placeholderapi)
|
compileOnly(libs.placeholderapi)
|
||||||
@ -44,15 +44,15 @@ dependencies {
|
|||||||
|
|
||||||
// Other libraries
|
// Other libraries
|
||||||
implementation(libs.squirrelid) { isTransitive = false }
|
implementation(libs.squirrelid) { isTransitive = false }
|
||||||
implementation(libs.serverlib)
|
implementation("dev.notmyfault.serverlib:ServerLib")
|
||||||
|
|
||||||
// Our libraries
|
// Our libraries
|
||||||
implementation(libs.arkitektonika)
|
implementation(libs.arkitektonika)
|
||||||
implementation(libs.paster)
|
implementation(libs.http4j)
|
||||||
implementation(libs.informativeAnnotations)
|
implementation("com.intellectualsites.paster:Paster")
|
||||||
|
|
||||||
// Adventure
|
// Adventure
|
||||||
implementation(libs.adventureBukkit)
|
implementation("net.kyori:adventure-platform-bukkit")
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.processResources {
|
tasks.processResources {
|
||||||
@ -62,7 +62,6 @@ tasks.processResources {
|
|||||||
}
|
}
|
||||||
|
|
||||||
tasks.named<ShadowJar>("shadowJar") {
|
tasks.named<ShadowJar>("shadowJar") {
|
||||||
dependsOn(":plotsquared-core:shadowJar")
|
|
||||||
dependencies {
|
dependencies {
|
||||||
exclude(dependency("org.checkerframework:"))
|
exclude(dependency("org.checkerframework:"))
|
||||||
}
|
}
|
||||||
@ -88,7 +87,6 @@ tasks.named<ShadowJar>("shadowJar") {
|
|||||||
relocate("javax.inject", "com.plotsquared.core.annotation.inject")
|
relocate("javax.inject", "com.plotsquared.core.annotation.inject")
|
||||||
relocate("net.jcip", "com.plotsquared.core.annotations.jcip")
|
relocate("net.jcip", "com.plotsquared.core.annotations.jcip")
|
||||||
relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs")
|
relocate("edu.umd.cs.findbugs", "com.plotsquared.core.annotations.findbugs")
|
||||||
relocate("com.intellectualsites.annotations", "com.plotsquared.core.annotations.informative")
|
|
||||||
|
|
||||||
// Get rid of all the libs which are 100% unused.
|
// Get rid of all the libs which are 100% unused.
|
||||||
minimize()
|
minimize()
|
||||||
@ -98,19 +96,12 @@ tasks.named<ShadowJar>("shadowJar") {
|
|||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
withType<Javadoc> {
|
withType<Javadoc> {
|
||||||
val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
|
|
||||||
val opt = options as StandardJavadocDocletOptions
|
val opt = options as StandardJavadocDocletOptions
|
||||||
opt.links("https://jd.papermc.io/paper/1.20/")
|
opt.links("https://jd.papermc.io/paper/1.18/")
|
||||||
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
|
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-bukkit/" + libs.worldeditBukkit.get().versionConstraint.toString())
|
||||||
opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
|
opt.links("https://intellectualsites.github.io/plotsquared-javadocs/core/")
|
||||||
opt.links("https://jd.advntr.dev/api/4.14.0/")
|
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
|
||||||
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
opt.links("https://checkerframework.org/api/")
|
opt.links("https://checkerframework.org/api/")
|
||||||
opt.isLinkSource = true
|
|
||||||
opt.bottom(File("$rootDir/javadocfooter.html").readText())
|
|
||||||
opt.isUse = true
|
|
||||||
opt.encoding("UTF-8")
|
|
||||||
opt.keyWords()
|
|
||||||
opt.addStringOption("-since", isRelease)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,11 +36,11 @@ import com.plotsquared.bukkit.listener.ChunkListener;
|
|||||||
import com.plotsquared.bukkit.listener.EntityEventListener;
|
import com.plotsquared.bukkit.listener.EntityEventListener;
|
||||||
import com.plotsquared.bukkit.listener.EntitySpawnListener;
|
import com.plotsquared.bukkit.listener.EntitySpawnListener;
|
||||||
import com.plotsquared.bukkit.listener.PaperListener;
|
import com.plotsquared.bukkit.listener.PaperListener;
|
||||||
|
import com.plotsquared.bukkit.listener.PaperListener113;
|
||||||
import com.plotsquared.bukkit.listener.PlayerEventListener;
|
import com.plotsquared.bukkit.listener.PlayerEventListener;
|
||||||
import com.plotsquared.bukkit.listener.ProjectileEventListener;
|
import com.plotsquared.bukkit.listener.ProjectileEventListener;
|
||||||
import com.plotsquared.bukkit.listener.ServerListener;
|
import com.plotsquared.bukkit.listener.ServerListener;
|
||||||
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
import com.plotsquared.bukkit.listener.SingleWorldListener;
|
||||||
import com.plotsquared.bukkit.listener.SpigotListener;
|
|
||||||
import com.plotsquared.bukkit.listener.WorldEvents;
|
import com.plotsquared.bukkit.listener.WorldEvents;
|
||||||
import com.plotsquared.bukkit.placeholder.PAPIPlaceholders;
|
import com.plotsquared.bukkit.placeholder.PAPIPlaceholders;
|
||||||
import com.plotsquared.bukkit.placeholder.PlaceholderFormatter;
|
import com.plotsquared.bukkit.placeholder.PlaceholderFormatter;
|
||||||
@ -49,7 +49,6 @@ import com.plotsquared.bukkit.player.BukkitPlayerManager;
|
|||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
import com.plotsquared.bukkit.util.BukkitWorld;
|
import com.plotsquared.bukkit.util.BukkitWorld;
|
||||||
import com.plotsquared.bukkit.util.SetGenCB;
|
import com.plotsquared.bukkit.util.SetGenCB;
|
||||||
import com.plotsquared.bukkit.util.TranslationUpdateManager;
|
|
||||||
import com.plotsquared.bukkit.util.UpdateUtility;
|
import com.plotsquared.bukkit.util.UpdateUtility;
|
||||||
import com.plotsquared.bukkit.util.task.BukkitTaskManager;
|
import com.plotsquared.bukkit.util.task.BukkitTaskManager;
|
||||||
import com.plotsquared.bukkit.util.task.PaperTimeConverter;
|
import com.plotsquared.bukkit.util.task.PaperTimeConverter;
|
||||||
@ -72,8 +71,6 @@ import com.plotsquared.core.configuration.Storage;
|
|||||||
import com.plotsquared.core.configuration.caption.ChatFormatter;
|
import com.plotsquared.core.configuration.caption.ChatFormatter;
|
||||||
import com.plotsquared.core.configuration.file.YamlConfiguration;
|
import com.plotsquared.core.configuration.file.YamlConfiguration;
|
||||||
import com.plotsquared.core.database.DBFunc;
|
import com.plotsquared.core.database.DBFunc;
|
||||||
import com.plotsquared.core.events.RemoveRoadEntityEvent;
|
|
||||||
import com.plotsquared.core.events.Result;
|
|
||||||
import com.plotsquared.core.generator.GeneratorWrapper;
|
import com.plotsquared.core.generator.GeneratorWrapper;
|
||||||
import com.plotsquared.core.generator.IndependentPlotGenerator;
|
import com.plotsquared.core.generator.IndependentPlotGenerator;
|
||||||
import com.plotsquared.core.generator.SingleWorldGenerator;
|
import com.plotsquared.core.generator.SingleWorldGenerator;
|
||||||
@ -112,7 +109,6 @@ import com.plotsquared.core.uuid.CacheUUIDService;
|
|||||||
import com.plotsquared.core.uuid.UUIDPipeline;
|
import com.plotsquared.core.uuid.UUIDPipeline;
|
||||||
import com.plotsquared.core.uuid.offline.OfflineModeUUIDService;
|
import com.plotsquared.core.uuid.offline.OfflineModeUUIDService;
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
|
||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
import net.kyori.adventure.audience.Audience;
|
import net.kyori.adventure.audience.Audience;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -141,7 +137,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
import org.incendo.serverlib.ServerLib;
|
import org.incendo.serverlib.ServerLib;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -252,7 +247,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
this.pluginName = getDescription().getName();
|
this.pluginName = getDescription().getName();
|
||||||
|
|
||||||
@ -296,12 +290,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
);
|
);
|
||||||
this.injector.injectMembers(this);
|
this.injector.injectMembers(this);
|
||||||
|
|
||||||
try {
|
|
||||||
this.injector.getInstance(TranslationUpdateManager.class).upgradeTranslationFile();
|
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.serverLocale = Locale.forLanguageTag(Settings.Enabled_Components.DEFAULT_LOCALE);
|
this.serverLocale = Locale.forLanguageTag(Settings.Enabled_Components.DEFAULT_LOCALE);
|
||||||
|
|
||||||
if (PremiumVerification.isPremium() && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) {
|
if (PremiumVerification.isPremium() && Settings.Enabled_Components.UPDATE_NOTIFICATIONS) {
|
||||||
@ -367,9 +355,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
getServer().getPluginManager().registerEvents(injector().getInstance(ServerListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(ServerListener.class), this);
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(EntitySpawnListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(EntitySpawnListener.class), this);
|
||||||
if (PaperLib.isPaper() && Settings.Paper_Components.PAPER_LISTENERS) {
|
if (PaperLib.isPaper() && Settings.Paper_Components.PAPER_LISTENERS) {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
if (serverVersion()[1] == 13) {
|
||||||
|
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener113.class), this);
|
||||||
} else {
|
} else {
|
||||||
getServer().getPluginManager().registerEvents(injector().getInstance(SpigotListener.class), this);
|
getServer().getPluginManager().registerEvents(injector().getInstance(PaperListener.class), this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
this.plotListener.startRunnable();
|
this.plotListener.startRunnable();
|
||||||
}
|
}
|
||||||
@ -551,7 +541,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
this.startMetrics();
|
this.startMetrics();
|
||||||
|
|
||||||
if (Settings.Enabled_Components.WORLDS) {
|
if (Settings.Enabled_Components.WORLDS) {
|
||||||
TaskManager.getPlatformImplementation().taskRepeat(this::unload, TaskTime.seconds(10L));
|
TaskManager.getPlatformImplementation().taskRepeat(this::unload, TaskTime.seconds(1L));
|
||||||
try {
|
try {
|
||||||
singleWorldListener = injector().getInstance(SingleWorldListener.class);
|
singleWorldListener = injector().getInstance(SingleWorldListener.class);
|
||||||
Bukkit.getPluginManager().registerEvents(singleWorldListener, this);
|
Bukkit.getPluginManager().registerEvents(singleWorldListener, this);
|
||||||
@ -666,15 +656,20 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
final @NonNull SQLiteUUIDService sqLiteUUIDService,
|
final @NonNull SQLiteUUIDService sqLiteUUIDService,
|
||||||
final @NonNull CacheUUIDService cacheUUIDService
|
final @NonNull CacheUUIDService cacheUUIDService
|
||||||
) {
|
) {
|
||||||
// Record all unique UUID's and put them into a queue
|
// Load all uuids into a big chunky boi queue
|
||||||
final Set<UUID> uuidSet = new HashSet<>();
|
final Queue<UUID> uuidQueue = new LinkedBlockingQueue<>();
|
||||||
PlotSquared.get().forEachPlotRaw(plot -> {
|
PlotSquared.get().forEachPlotRaw(plot -> {
|
||||||
uuidSet.add(plot.getOwnerAbs());
|
final Set<UUID> uuids = new HashSet<>();
|
||||||
uuidSet.addAll(plot.getMembers());
|
uuids.add(plot.getOwnerAbs());
|
||||||
uuidSet.addAll(plot.getTrusted());
|
uuids.addAll(plot.getMembers());
|
||||||
uuidSet.addAll(plot.getDenied());
|
uuids.addAll(plot.getTrusted());
|
||||||
|
uuids.addAll(plot.getDenied());
|
||||||
|
for (final UUID uuid : uuids) {
|
||||||
|
if (!uuidQueue.contains(uuid)) {
|
||||||
|
uuidQueue.add(uuid);
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
final Queue<UUID> uuidQueue = new LinkedBlockingQueue<>(uuidSet);
|
|
||||||
|
|
||||||
LOGGER.info("(UUID) {} UUIDs will be cached", uuidQueue.size());
|
LOGGER.info("(UUID) {} UUIDs will be cached", uuidQueue.size());
|
||||||
|
|
||||||
@ -737,11 +732,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
this.getServer().getPluginManager().disablePlugin(this);
|
this.getServer().getPluginManager().disablePlugin(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void shutdownServer() {
|
|
||||||
getServer().shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void registerCommands() {
|
private void registerCommands() {
|
||||||
final BukkitCommand bukkitCommand = new BukkitCommand();
|
final BukkitCommand bukkitCommand = new BukkitCommand();
|
||||||
final PluginCommand plotCommand = getCommand("plots");
|
final PluginCommand plotCommand = getCommand("plots");
|
||||||
@ -822,7 +812,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
if (entity.hasMetadata("ps-tmp-teleport")) {
|
if (entity.hasMetadata("ps-tmp-teleport")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
this.removeRoadEntity(entity, iterator);
|
iterator.remove();
|
||||||
|
entity.remove();
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -835,7 +826,8 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
if (entity.hasMetadata("ps-tmp-teleport")) {
|
if (entity.hasMetadata("ps-tmp-teleport")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
this.removeRoadEntity(entity, iterator);
|
iterator.remove();
|
||||||
|
entity.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
@ -845,7 +837,7 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
case "DROPPED_ITEM":
|
case "DROPPED_ITEM":
|
||||||
if (Settings.Enabled_Components.KILL_ROAD_ITEMS
|
if (Settings.Enabled_Components.KILL_ROAD_ITEMS
|
||||||
&& plotArea.getOwnedPlotAbs(BukkitUtil.adapt(entity.getLocation())) == null) {
|
&& plotArea.getOwnedPlotAbs(BukkitUtil.adapt(entity.getLocation())) == null) {
|
||||||
this.removeRoadEntity(entity, iterator);
|
entity.remove();
|
||||||
}
|
}
|
||||||
// dropped item
|
// dropped item
|
||||||
continue;
|
continue;
|
||||||
@ -854,11 +846,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
// managed elsewhere
|
// managed elsewhere
|
||||||
continue;
|
continue;
|
||||||
case "SHULKER":
|
case "SHULKER":
|
||||||
if (Settings.Enabled_Components.KILL_ROAD_MOBS && (Settings.Enabled_Components.KILL_NAMED_ROAD_MOBS || entity.getCustomName() == null)) {
|
if (Settings.Enabled_Components.KILL_ROAD_MOBS) {
|
||||||
LivingEntity livingEntity = (LivingEntity) entity;
|
LivingEntity livingEntity = (LivingEntity) entity;
|
||||||
List<MetadataValue> meta = entity.getMetadata("shulkerPlot");
|
List<MetadataValue> meta = entity.getMetadata("shulkerPlot");
|
||||||
if (!meta.isEmpty()) {
|
if (!meta.isEmpty()) {
|
||||||
if (livingEntity.isLeashed() && !Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS) {
|
if (livingEntity.isLeashed()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
List<MetadataValue> keep = entity.getMetadata("keep");
|
List<MetadataValue> keep = entity.getMetadata("keep");
|
||||||
@ -871,12 +863,15 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation());
|
com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation());
|
||||||
PlotArea area = pLoc.getPlotArea();
|
PlotArea area = pLoc.getPlotArea();
|
||||||
if (area != null) {
|
if (area != null) {
|
||||||
Plot currentPlot = area.getPlotAbs(pLoc);
|
PlotId currentPlotId = area.getPlotAbs(pLoc).getId();
|
||||||
if (currentPlot == null || !originalPlotId.equals(currentPlot.getId())) {
|
if (!originalPlotId.equals(currentPlotId) && (currentPlotId == null || !area.getPlot(
|
||||||
|
originalPlotId)
|
||||||
|
.equals(area.getPlot(currentPlotId)))) {
|
||||||
if (entity.hasMetadata("ps-tmp-teleport")) {
|
if (entity.hasMetadata("ps-tmp-teleport")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
this.removeRoadEntity(entity, iterator);
|
iterator.remove();
|
||||||
|
entity.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -885,11 +880,11 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation());
|
com.plotsquared.core.location.Location pLoc = BukkitUtil.adapt(entity.getLocation());
|
||||||
PlotArea area = pLoc.getPlotArea();
|
PlotArea area = pLoc.getPlotArea();
|
||||||
if (area != null) {
|
if (area != null) {
|
||||||
Plot currentPlot = area.getPlotAbs(pLoc);
|
PlotId currentPlotId = area.getPlotAbs(pLoc).getId();
|
||||||
if (currentPlot != null) {
|
if (currentPlotId != null) {
|
||||||
entity.setMetadata(
|
entity.setMetadata(
|
||||||
"shulkerPlot",
|
"shulkerPlot",
|
||||||
new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlot.getId())
|
new FixedMetadataValue((Plugin) PlotSquared.platform(), currentPlotId)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -975,24 +970,23 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
|| !entity.hasMetadata("keep")) {
|
|| !entity.hasMetadata("keep")) {
|
||||||
Entity passenger = entity.getPassenger();
|
Entity passenger = entity.getPassenger();
|
||||||
if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS
|
if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS
|
||||||
|| !((passenger instanceof Player) || livingEntity.isLeashed()))
|
|| !(passenger instanceof Player)) && entity.getMetadata("keep").isEmpty()) {
|
||||||
&& (Settings.Enabled_Components.KILL_NAMED_ROAD_MOBS || entity.getCustomName() == null)
|
|
||||||
&& entity.getMetadata("keep").isEmpty()) {
|
|
||||||
if (entity.hasMetadata("ps-tmp-teleport")) {
|
if (entity.hasMetadata("ps-tmp-teleport")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
this.removeRoadEntity(entity, iterator);
|
iterator.remove();
|
||||||
|
entity.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Entity passenger = entity.getPassenger();
|
Entity passenger = entity.getPassenger();
|
||||||
if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS || !(passenger instanceof Player))
|
if ((Settings.Enabled_Components.KILL_OWNED_ROAD_MOBS
|
||||||
&& (Settings.Enabled_Components.KILL_NAMED_ROAD_MOBS && entity.getCustomName() != null)
|
|| !(passenger instanceof Player)) && entity.getMetadata("keep").isEmpty()) {
|
||||||
&& entity.getMetadata("keep").isEmpty()) {
|
|
||||||
if (entity.hasMetadata("ps-tmp-teleport")) {
|
if (entity.hasMetadata("ps-tmp-teleport")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
this.removeRoadEntity(entity, iterator);
|
iterator.remove();
|
||||||
|
entity.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1006,17 +1000,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
}), TaskTime.seconds(1L));
|
}), TaskTime.seconds(1L));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removeRoadEntity(Entity entity, Iterator<Entity> entityIterator) {
|
|
||||||
RemoveRoadEntityEvent event = eventDispatcher.callRemoveRoadEntity(BukkitAdapter.adapt(entity));
|
|
||||||
|
|
||||||
if (event.getEventResult() == Result.DENY) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
entityIterator.remove();
|
|
||||||
entity.remove();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable
|
public @Nullable
|
||||||
final ChunkGenerator getDefaultWorldGenerator(
|
final ChunkGenerator getDefaultWorldGenerator(
|
||||||
@ -1161,7 +1144,6 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
return new BukkitPlotGenerator(world, generator, this.plotAreaManager);
|
return new BukkitPlotGenerator(world, generator, this.plotAreaManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
@Override
|
@Override
|
||||||
public @NonNull String pluginsFormatted() {
|
public @NonNull String pluginsFormatted() {
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
@ -1183,21 +1165,13 @@ public final class BukkitPlatform extends JavaPlugin implements Listener, PlotPl
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings({"ConstantConditions", "deprecation"}) // Paper deprecation
|
@SuppressWarnings("ConstantConditions")
|
||||||
public @NonNull String worldEditImplementations() {
|
public @NonNull String worldEditImplementations() {
|
||||||
StringBuilder msg = new StringBuilder();
|
StringBuilder msg = new StringBuilder();
|
||||||
if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) {
|
if (Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit") != null) {
|
||||||
msg.append("FastAsyncWorldEdit: ").append(Bukkit
|
msg.append("FastAsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit").getDescription().getVersion());
|
||||||
.getPluginManager()
|
|
||||||
.getPlugin("FastAsyncWorldEdit")
|
|
||||||
.getDescription()
|
|
||||||
.getVersion());
|
|
||||||
} else if (Bukkit.getPluginManager().getPlugin("AsyncWorldEdit") != null) {
|
} else if (Bukkit.getPluginManager().getPlugin("AsyncWorldEdit") != null) {
|
||||||
msg.append("AsyncWorldEdit: ").append(Bukkit
|
msg.append("AsyncWorldEdit: ").append(Bukkit.getPluginManager().getPlugin("AsyncWorldEdit").getDescription().getVersion()).append("\n");
|
||||||
.getPluginManager()
|
|
||||||
.getPlugin("AsyncWorldEdit")
|
|
||||||
.getDescription()
|
|
||||||
.getVersion()).append("\n");
|
|
||||||
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||||
} else {
|
} else {
|
||||||
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
msg.append("WorldEdit: ").append(Bukkit.getPluginManager().getPlugin("WorldEdit").getDescription().getVersion());
|
||||||
|
@ -74,7 +74,6 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
private HorseStats horse;
|
private HorseStats horse;
|
||||||
private boolean noGravity;
|
private boolean noGravity;
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Deprecation exists since 1.20, while we support 1.16 onwards
|
|
||||||
public ReplicatingEntityWrapper(Entity entity, short depth) {
|
public ReplicatingEntityWrapper(Entity entity, short depth) {
|
||||||
super(entity);
|
super(entity);
|
||||||
|
|
||||||
@ -102,26 +101,50 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
this.noGravity = true;
|
this.noGravity = true;
|
||||||
}
|
}
|
||||||
switch (entity.getType().toString()) {
|
switch (entity.getType().toString()) {
|
||||||
case "BOAT" -> {
|
case "BOAT":
|
||||||
Boat boat = (Boat) entity;
|
Boat boat = (Boat) entity;
|
||||||
this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType());
|
this.dataByte = getOrdinal(TreeSpecies.values(), boat.getWoodType());
|
||||||
return;
|
return;
|
||||||
}
|
case "ARROW":
|
||||||
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "EXPERIENCE_ORB", "FALLING_BLOCK", "FIREBALL",
|
case "EGG":
|
||||||
"FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND", "MINECART_MOB_SPAWNER",
|
case "ENDER_CRYSTAL":
|
||||||
"MINECART_TNT", "PLAYER", "PRIMED_TNT", "SLIME", "SMALL_FIREBALL", "SNOWBALL", "MINECART_FURNACE", "SPLASH_POTION",
|
case "ENDER_PEARL":
|
||||||
"THROWN_EXP_BOTTLE", "WITHER_SKULL", "UNKNOWN", "SPECTRAL_ARROW", "SHULKER_BULLET", "DRAGON_FIREBALL", "AREA_EFFECT_CLOUD",
|
case "ENDER_SIGNAL":
|
||||||
"TRIDENT", "LLAMA_SPIT" -> {
|
case "EXPERIENCE_ORB":
|
||||||
|
case "FALLING_BLOCK":
|
||||||
|
case "FIREBALL":
|
||||||
|
case "FIREWORK":
|
||||||
|
case "FISHING_HOOK":
|
||||||
|
case "LEASH_HITCH":
|
||||||
|
case "LIGHTNING":
|
||||||
|
case "MINECART":
|
||||||
|
case "MINECART_COMMAND":
|
||||||
|
case "MINECART_MOB_SPAWNER":
|
||||||
|
case "MINECART_TNT":
|
||||||
|
case "PLAYER":
|
||||||
|
case "PRIMED_TNT":
|
||||||
|
case "SLIME":
|
||||||
|
case "SMALL_FIREBALL":
|
||||||
|
case "SNOWBALL":
|
||||||
|
case "MINECART_FURNACE":
|
||||||
|
case "SPLASH_POTION":
|
||||||
|
case "THROWN_EXP_BOTTLE":
|
||||||
|
case "WITHER_SKULL":
|
||||||
|
case "UNKNOWN":
|
||||||
|
case "SPECTRAL_ARROW":
|
||||||
|
case "SHULKER_BULLET":
|
||||||
|
case "DRAGON_FIREBALL":
|
||||||
|
case "AREA_EFFECT_CLOUD":
|
||||||
|
case "TRIDENT":
|
||||||
|
case "LLAMA_SPIT":
|
||||||
// Do this stuff later
|
// Do this stuff later
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// MISC //
|
// MISC //
|
||||||
case "DROPPED_ITEM" -> {
|
case "DROPPED_ITEM":
|
||||||
Item item = (Item) entity;
|
Item item = (Item) entity;
|
||||||
this.stack = item.getItemStack();
|
this.stack = item.getItemStack();
|
||||||
return;
|
return;
|
||||||
}
|
case "ITEM_FRAME":
|
||||||
case "ITEM_FRAME" -> {
|
|
||||||
this.x = Math.floor(this.getX());
|
this.x = Math.floor(this.getX());
|
||||||
this.y = Math.floor(this.getY());
|
this.y = Math.floor(this.getY());
|
||||||
this.z = Math.floor(this.getZ());
|
this.z = Math.floor(this.getZ());
|
||||||
@ -129,8 +152,7 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
this.dataByte = getOrdinal(Rotation.values(), itemFrame.getRotation());
|
this.dataByte = getOrdinal(Rotation.values(), itemFrame.getRotation());
|
||||||
this.stack = itemFrame.getItem().clone();
|
this.stack = itemFrame.getItem().clone();
|
||||||
return;
|
return;
|
||||||
}
|
case "PAINTING":
|
||||||
case "PAINTING" -> {
|
|
||||||
this.x = Math.floor(this.getX());
|
this.x = Math.floor(this.getX());
|
||||||
this.y = Math.floor(this.getY());
|
this.y = Math.floor(this.getY());
|
||||||
this.z = Math.floor(this.getZ());
|
this.z = Math.floor(this.getZ());
|
||||||
@ -143,17 +165,20 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
}
|
}
|
||||||
this.dataString = art.name();
|
this.dataString = art.name();
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// END MISC //
|
// END MISC //
|
||||||
// INVENTORY HOLDER //
|
// INVENTORY HOLDER //
|
||||||
case "MINECART_CHEST", "MINECART_HOPPER" -> {
|
case "MINECART_CHEST":
|
||||||
|
case "MINECART_HOPPER":
|
||||||
storeInventory((InventoryHolder) entity);
|
storeInventory((InventoryHolder) entity);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// START LIVING ENTITY //
|
// START LIVING ENTITY //
|
||||||
// START AGEABLE //
|
// START AGEABLE //
|
||||||
// START TAMEABLE //
|
// START TAMEABLE //
|
||||||
case "HORSE", "DONKEY", "LLAMA", "MULE", "SKELETON_HORSE" -> {
|
case "HORSE":
|
||||||
|
case "DONKEY":
|
||||||
|
case "LLAMA":
|
||||||
|
case "MULE":
|
||||||
|
case "SKELETON_HORSE":
|
||||||
AbstractHorse horse = (AbstractHorse) entity;
|
AbstractHorse horse = (AbstractHorse) entity;
|
||||||
this.horse = new HorseStats();
|
this.horse = new HorseStats();
|
||||||
this.horse.jump = horse.getJumpStrength();
|
this.horse.jump = horse.getJumpStrength();
|
||||||
@ -169,17 +194,16 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
storeLiving(horse);
|
storeLiving(horse);
|
||||||
storeInventory(horse);
|
storeInventory(horse);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// END INVENTORY HOLDER //
|
// END INVENTORY HOLDER //
|
||||||
case "WOLF", "OCELOT" -> {
|
case "WOLF":
|
||||||
|
case "OCELOT":
|
||||||
storeTameable((Tameable) entity);
|
storeTameable((Tameable) entity);
|
||||||
storeAgeable((Ageable) entity);
|
storeAgeable((Ageable) entity);
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// END TAMEABLE //
|
// END TAMEABLE //
|
||||||
//todo fix sheep
|
//todo fix sheep
|
||||||
case "SHEEP" -> {
|
case "SHEEP":
|
||||||
Sheep sheep = (Sheep) entity;
|
Sheep sheep = (Sheep) entity;
|
||||||
if (sheep.isSheared()) {
|
if (sheep.isSheared()) {
|
||||||
this.dataByte = (byte) 1;
|
this.dataByte = (byte) 1;
|
||||||
@ -190,20 +214,23 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
storeAgeable(sheep);
|
storeAgeable(sheep);
|
||||||
storeLiving(sheep);
|
storeLiving(sheep);
|
||||||
return;
|
return;
|
||||||
}
|
case "VILLAGER":
|
||||||
case "VILLAGER", "CHICKEN", "COW", "MUSHROOM_COW", "PIG", "TURTLE", "POLAR_BEAR" -> {
|
case "CHICKEN":
|
||||||
|
case "COW":
|
||||||
|
case "MUSHROOM_COW":
|
||||||
|
case "PIG":
|
||||||
|
case "TURTLE":
|
||||||
|
case "POLAR_BEAR":
|
||||||
storeAgeable((Ageable) entity);
|
storeAgeable((Ageable) entity);
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
return;
|
return;
|
||||||
}
|
case "RABBIT":
|
||||||
case "RABBIT" -> {
|
|
||||||
this.dataByte = getOrdinal(Rabbit.Type.values(), ((Rabbit) entity).getRabbitType());
|
this.dataByte = getOrdinal(Rabbit.Type.values(), ((Rabbit) entity).getRabbitType());
|
||||||
storeAgeable((Ageable) entity);
|
storeAgeable((Ageable) entity);
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
// END AGEABLE //
|
// END AGEABLE //
|
||||||
case "ARMOR_STAND" -> {
|
case "ARMOR_STAND":
|
||||||
ArmorStand stand = (ArmorStand) entity;
|
ArmorStand stand = (ArmorStand) entity;
|
||||||
this.inventory =
|
this.inventory =
|
||||||
new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(),
|
new ItemStack[]{stand.getItemInHand().clone(), stand.getHelmet().clone(),
|
||||||
@ -211,30 +238,37 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
stand.getBoots().clone()};
|
stand.getBoots().clone()};
|
||||||
storeLiving(stand);
|
storeLiving(stand);
|
||||||
this.stand = new ArmorStandStats();
|
this.stand = new ArmorStandStats();
|
||||||
|
|
||||||
EulerAngle head = stand.getHeadPose();
|
EulerAngle head = stand.getHeadPose();
|
||||||
this.stand.head[0] = (float) head.getX();
|
this.stand.head[0] = (float) head.getX();
|
||||||
this.stand.head[1] = (float) head.getY();
|
this.stand.head[1] = (float) head.getY();
|
||||||
this.stand.head[2] = (float) head.getZ();
|
this.stand.head[2] = (float) head.getZ();
|
||||||
|
|
||||||
EulerAngle body = stand.getBodyPose();
|
EulerAngle body = stand.getBodyPose();
|
||||||
this.stand.body[0] = (float) body.getX();
|
this.stand.body[0] = (float) body.getX();
|
||||||
this.stand.body[1] = (float) body.getY();
|
this.stand.body[1] = (float) body.getY();
|
||||||
this.stand.body[2] = (float) body.getZ();
|
this.stand.body[2] = (float) body.getZ();
|
||||||
|
|
||||||
EulerAngle leftLeg = stand.getLeftLegPose();
|
EulerAngle leftLeg = stand.getLeftLegPose();
|
||||||
this.stand.leftLeg[0] = (float) leftLeg.getX();
|
this.stand.leftLeg[0] = (float) leftLeg.getX();
|
||||||
this.stand.leftLeg[1] = (float) leftLeg.getY();
|
this.stand.leftLeg[1] = (float) leftLeg.getY();
|
||||||
this.stand.leftLeg[2] = (float) leftLeg.getZ();
|
this.stand.leftLeg[2] = (float) leftLeg.getZ();
|
||||||
|
|
||||||
EulerAngle rightLeg = stand.getRightLegPose();
|
EulerAngle rightLeg = stand.getRightLegPose();
|
||||||
this.stand.rightLeg[0] = (float) rightLeg.getX();
|
this.stand.rightLeg[0] = (float) rightLeg.getX();
|
||||||
this.stand.rightLeg[1] = (float) rightLeg.getY();
|
this.stand.rightLeg[1] = (float) rightLeg.getY();
|
||||||
this.stand.rightLeg[2] = (float) rightLeg.getZ();
|
this.stand.rightLeg[2] = (float) rightLeg.getZ();
|
||||||
|
|
||||||
EulerAngle leftArm = stand.getLeftArmPose();
|
EulerAngle leftArm = stand.getLeftArmPose();
|
||||||
this.stand.leftArm[0] = (float) leftArm.getX();
|
this.stand.leftArm[0] = (float) leftArm.getX();
|
||||||
this.stand.leftArm[1] = (float) leftArm.getY();
|
this.stand.leftArm[1] = (float) leftArm.getY();
|
||||||
this.stand.leftArm[2] = (float) leftArm.getZ();
|
this.stand.leftArm[2] = (float) leftArm.getZ();
|
||||||
|
|
||||||
EulerAngle rightArm = stand.getRightArmPose();
|
EulerAngle rightArm = stand.getRightArmPose();
|
||||||
this.stand.rightArm[0] = (float) rightArm.getX();
|
this.stand.rightArm[0] = (float) rightArm.getX();
|
||||||
this.stand.rightArm[1] = (float) rightArm.getY();
|
this.stand.rightArm[1] = (float) rightArm.getY();
|
||||||
this.stand.rightArm[2] = (float) rightArm.getZ();
|
this.stand.rightArm[2] = (float) rightArm.getZ();
|
||||||
|
|
||||||
if (stand.hasArms()) {
|
if (stand.hasArms()) {
|
||||||
this.stand.arms = true;
|
this.stand.arms = true;
|
||||||
}
|
}
|
||||||
@ -248,37 +282,52 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
this.stand.small = true;
|
this.stand.small = true;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
case "ENDERMITE":
|
||||||
case "ENDERMITE" -> {
|
|
||||||
return;
|
return;
|
||||||
}
|
case "BAT":
|
||||||
case "BAT" -> {
|
|
||||||
if (((Bat) entity).isAwake()) {
|
if (((Bat) entity).isAwake()) {
|
||||||
this.dataByte = (byte) 1;
|
this.dataByte = (byte) 1;
|
||||||
} else {
|
} else {
|
||||||
this.dataByte = (byte) 0;
|
this.dataByte = (byte) 0;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
case "ENDER_DRAGON":
|
||||||
case "ENDER_DRAGON" -> {
|
|
||||||
EnderDragon entity1 = (EnderDragon) entity;
|
EnderDragon entity1 = (EnderDragon) entity;
|
||||||
this.dataByte = (byte) entity1.getPhase().ordinal();
|
this.dataByte = (byte) entity1.getPhase().ordinal();
|
||||||
return;
|
return;
|
||||||
}
|
case "SKELETON":
|
||||||
case "SKELETON", "WITHER_SKELETON", "GUARDIAN", "ELDER_GUARDIAN", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN",
|
case "WITHER_SKELETON":
|
||||||
"ZOMBIFIED_PIGLIN", "PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH",
|
case "GUARDIAN":
|
||||||
"GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SHULKER", "SNOWMAN" -> {
|
case "ELDER_GUARDIAN":
|
||||||
|
case "GHAST":
|
||||||
|
case "MAGMA_CUBE":
|
||||||
|
case "SQUID":
|
||||||
|
case "PIG_ZOMBIE":
|
||||||
|
case "HOGLIN":
|
||||||
|
case "ZOMBIFIED_PIGLIN":
|
||||||
|
case "PIGLIN":
|
||||||
|
case "PIGLIN_BRUTE":
|
||||||
|
case "ZOMBIE":
|
||||||
|
case "WITHER":
|
||||||
|
case "WITCH":
|
||||||
|
case "SPIDER":
|
||||||
|
case "CAVE_SPIDER":
|
||||||
|
case "SILVERFISH":
|
||||||
|
case "GIANT":
|
||||||
|
case "ENDERMAN":
|
||||||
|
case "CREEPER":
|
||||||
|
case "BLAZE":
|
||||||
|
case "SHULKER":
|
||||||
|
case "SNOWMAN":
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
return;
|
return;
|
||||||
}
|
case "IRON_GOLEM":
|
||||||
case "IRON_GOLEM" -> {
|
|
||||||
if (((IronGolem) entity).isPlayerCreated()) {
|
if (((IronGolem) entity).isPlayerCreated()) {
|
||||||
this.dataByte = (byte) 1;
|
this.dataByte = (byte) 1;
|
||||||
} else {
|
} else {
|
||||||
this.dataByte = (byte) 0;
|
this.dataByte = (byte) 0;
|
||||||
}
|
}
|
||||||
storeLiving((LivingEntity) entity);
|
storeLiving((LivingEntity) entity);
|
||||||
}
|
|
||||||
// END LIVING //
|
// END LIVING //
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -416,15 +465,20 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
}
|
}
|
||||||
Entity entity;
|
Entity entity;
|
||||||
switch (this.getType().toString()) {
|
switch (this.getType().toString()) {
|
||||||
case "DROPPED_ITEM" -> {
|
case "DROPPED_ITEM":
|
||||||
return world.dropItem(location, this.stack);
|
return world.dropItem(location, this.stack);
|
||||||
}
|
case "PLAYER":
|
||||||
case "PLAYER", "LEASH_HITCH" -> {
|
case "LEASH_HITCH":
|
||||||
return null;
|
return null;
|
||||||
}
|
case "ITEM_FRAME":
|
||||||
case "ITEM_FRAME" -> entity = world.spawn(location, ItemFrame.class);
|
entity = world.spawn(location, ItemFrame.class);
|
||||||
case "PAINTING" -> entity = world.spawn(location, Painting.class);
|
break;
|
||||||
default -> entity = world.spawnEntity(location, this.getType());
|
case "PAINTING":
|
||||||
|
entity = world.spawn(location, Painting.class);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
entity = world.spawnEntity(location, this.getType());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (this.depth == 0) {
|
if (this.depth == 0) {
|
||||||
return entity;
|
return entity;
|
||||||
@ -452,46 +506,72 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
entity.setGravity(false);
|
entity.setGravity(false);
|
||||||
}
|
}
|
||||||
switch (entity.getType().toString()) {
|
switch (entity.getType().toString()) {
|
||||||
case "BOAT" -> {
|
case "BOAT":
|
||||||
Boat boat = (Boat) entity;
|
Boat boat = (Boat) entity;
|
||||||
boat.setWoodType(TreeSpecies.values()[dataByte]);
|
boat.setWoodType(TreeSpecies.values()[dataByte]);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "SLIME":
|
||||||
case "SLIME" -> {
|
|
||||||
((Slime) entity).setSize(this.dataByte);
|
((Slime) entity).setSize(this.dataByte);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "ARROW":
|
||||||
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "DROPPED_ITEM", "EXPERIENCE_ORB", "FALLING_BLOCK",
|
case "EGG":
|
||||||
"FIREBALL", "FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND",
|
case "ENDER_CRYSTAL":
|
||||||
"MINECART_MOB_SPAWNER", "MINECART_TNT", "PLAYER", "PRIMED_TNT", "SMALL_FIREBALL", "SNOWBALL",
|
case "ENDER_PEARL":
|
||||||
"SPLASH_POTION", "THROWN_EXP_BOTTLE", "SPECTRAL_ARROW", "SHULKER_BULLET", "AREA_EFFECT_CLOUD",
|
case "ENDER_SIGNAL":
|
||||||
"DRAGON_FIREBALL", "WITHER_SKULL", "MINECART_FURNACE", "LLAMA_SPIT", "TRIDENT", "UNKNOWN" -> {
|
case "DROPPED_ITEM":
|
||||||
|
case "EXPERIENCE_ORB":
|
||||||
|
case "FALLING_BLOCK":
|
||||||
|
case "FIREBALL":
|
||||||
|
case "FIREWORK":
|
||||||
|
case "FISHING_HOOK":
|
||||||
|
case "LEASH_HITCH":
|
||||||
|
case "LIGHTNING":
|
||||||
|
case "MINECART":
|
||||||
|
case "MINECART_COMMAND":
|
||||||
|
case "MINECART_MOB_SPAWNER":
|
||||||
|
case "MINECART_TNT":
|
||||||
|
case "PLAYER":
|
||||||
|
case "PRIMED_TNT":
|
||||||
|
case "SMALL_FIREBALL":
|
||||||
|
case "SNOWBALL":
|
||||||
|
case "SPLASH_POTION":
|
||||||
|
case "THROWN_EXP_BOTTLE":
|
||||||
|
case "SPECTRAL_ARROW":
|
||||||
|
case "SHULKER_BULLET":
|
||||||
|
case "AREA_EFFECT_CLOUD":
|
||||||
|
case "DRAGON_FIREBALL":
|
||||||
|
case "WITHER_SKULL":
|
||||||
|
case "MINECART_FURNACE":
|
||||||
|
case "LLAMA_SPIT":
|
||||||
|
case "TRIDENT":
|
||||||
|
case "UNKNOWN":
|
||||||
// Do this stuff later
|
// Do this stuff later
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// MISC //
|
// MISC //
|
||||||
case "ITEM_FRAME" -> {
|
case "ITEM_FRAME":
|
||||||
ItemFrame itemframe = (ItemFrame) entity;
|
ItemFrame itemframe = (ItemFrame) entity;
|
||||||
itemframe.setRotation(Rotation.values()[this.dataByte]);
|
itemframe.setRotation(Rotation.values()[this.dataByte]);
|
||||||
itemframe.setItem(this.stack);
|
itemframe.setItem(this.stack);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "PAINTING":
|
||||||
case "PAINTING" -> {
|
|
||||||
Painting painting = (Painting) entity;
|
Painting painting = (Painting) entity;
|
||||||
painting.setFacingDirection(BlockFace.values()[this.dataByte], true);
|
painting.setFacingDirection(BlockFace.values()[this.dataByte], true);
|
||||||
painting.setArt(Art.getByName(this.dataString), true);
|
painting.setArt(Art.getByName(this.dataString), true);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END MISC //
|
// END MISC //
|
||||||
// INVENTORY HOLDER //
|
// INVENTORY HOLDER //
|
||||||
case "MINECART_CHEST", "MINECART_HOPPER" -> {
|
case "MINECART_CHEST":
|
||||||
|
case "MINECART_HOPPER":
|
||||||
restoreInventory((InventoryHolder) entity);
|
restoreInventory((InventoryHolder) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// START LIVING ENTITY //
|
// START LIVING ENTITY //
|
||||||
// START AGEABLE //
|
// START AGEABLE //
|
||||||
// START TAMEABLE //
|
// START TAMEABLE //
|
||||||
case "HORSE", "LLAMA", "SKELETON_HORSE", "DONKEY", "MULE" -> {
|
case "HORSE":
|
||||||
|
case "LLAMA":
|
||||||
|
case "SKELETON_HORSE":
|
||||||
|
case "DONKEY":
|
||||||
|
case "MULE":
|
||||||
AbstractHorse horse = (AbstractHorse) entity;
|
AbstractHorse horse = (AbstractHorse) entity;
|
||||||
horse.setJumpStrength(this.horse.jump);
|
horse.setJumpStrength(this.horse.jump);
|
||||||
if (horse instanceof ChestedHorse) {
|
if (horse instanceof ChestedHorse) {
|
||||||
@ -506,16 +586,15 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
restoreLiving(horse);
|
restoreLiving(horse);
|
||||||
restoreInventory(horse);
|
restoreInventory(horse);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END INVENTORY HOLDER //
|
// END INVENTORY HOLDER //
|
||||||
case "WOLF", "OCELOT" -> {
|
case "WOLF":
|
||||||
|
case "OCELOT":
|
||||||
restoreTameable((Tameable) entity);
|
restoreTameable((Tameable) entity);
|
||||||
restoreAgeable((Ageable) entity);
|
restoreAgeable((Ageable) entity);
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END AGEABLE //
|
// END AGEABLE //
|
||||||
case "SHEEP" -> {
|
case "SHEEP":
|
||||||
Sheep sheep = (Sheep) entity;
|
Sheep sheep = (Sheep) entity;
|
||||||
if (this.dataByte == 1) {
|
if (this.dataByte == 1) {
|
||||||
sheep.setSheared(true);
|
sheep.setSheared(true);
|
||||||
@ -526,22 +605,25 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
restoreAgeable(sheep);
|
restoreAgeable(sheep);
|
||||||
restoreLiving(sheep);
|
restoreLiving(sheep);
|
||||||
return sheep;
|
return sheep;
|
||||||
}
|
case "VILLAGER":
|
||||||
case "VILLAGER", "CHICKEN", "COW", "TURTLE", "POLAR_BEAR", "MUSHROOM_COW", "PIG" -> {
|
case "CHICKEN":
|
||||||
|
case "COW":
|
||||||
|
case "TURTLE":
|
||||||
|
case "POLAR_BEAR":
|
||||||
|
case "MUSHROOM_COW":
|
||||||
|
case "PIG":
|
||||||
restoreAgeable((Ageable) entity);
|
restoreAgeable((Ageable) entity);
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END AGEABLE //
|
// END AGEABLE //
|
||||||
case "RABBIT" -> {
|
case "RABBIT":
|
||||||
if (this.dataByte != 0) {
|
if (this.dataByte != 0) {
|
||||||
((Rabbit) entity).setRabbitType(Rabbit.Type.values()[this.dataByte]);
|
((Rabbit) entity).setRabbitType(Rabbit.Type.values()[this.dataByte]);
|
||||||
}
|
}
|
||||||
restoreAgeable((Ageable) entity);
|
restoreAgeable((Ageable) entity);
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "ARMOR_STAND":
|
||||||
case "ARMOR_STAND" -> {
|
|
||||||
// CHECK positions
|
// CHECK positions
|
||||||
ArmorStand stand = (ArmorStand) entity;
|
ArmorStand stand = (ArmorStand) entity;
|
||||||
if (this.inventory[0] != null) {
|
if (this.inventory[0] != null) {
|
||||||
@ -611,38 +693,56 @@ public final class ReplicatingEntityWrapper extends EntityWrapper {
|
|||||||
}
|
}
|
||||||
restoreLiving(stand);
|
restoreLiving(stand);
|
||||||
return stand;
|
return stand;
|
||||||
}
|
case "BAT":
|
||||||
case "BAT" -> {
|
|
||||||
if (this.dataByte != 0) {
|
if (this.dataByte != 0) {
|
||||||
((Bat) entity).setAwake(true);
|
((Bat) entity).setAwake(true);
|
||||||
}
|
}
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "ENDER_DRAGON":
|
||||||
case "ENDER_DRAGON" -> {
|
|
||||||
if (this.dataByte != 0) {
|
if (this.dataByte != 0) {
|
||||||
((EnderDragon) entity).setPhase(EnderDragon.Phase.values()[this.dataByte]);
|
((EnderDragon) entity).setPhase(EnderDragon.Phase.values()[this.dataByte]);
|
||||||
}
|
}
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "ENDERMITE":
|
||||||
case "ENDERMITE", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN", "PIGLIN", "ZOMBIFIED_PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH", "GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SNOWMAN", "SHULKER", "GUARDIAN", "ELDER_GUARDIAN", "SKELETON", "WITHER_SKELETON" -> {
|
case "GHAST":
|
||||||
|
case "MAGMA_CUBE":
|
||||||
|
case "SQUID":
|
||||||
|
case "PIG_ZOMBIE":
|
||||||
|
case "HOGLIN":
|
||||||
|
case "PIGLIN":
|
||||||
|
case "ZOMBIFIED_PIGLIN":
|
||||||
|
case "PIGLIN_BRUTE":
|
||||||
|
case "ZOMBIE":
|
||||||
|
case "WITHER":
|
||||||
|
case "WITCH":
|
||||||
|
case "SPIDER":
|
||||||
|
case "CAVE_SPIDER":
|
||||||
|
case "SILVERFISH":
|
||||||
|
case "GIANT":
|
||||||
|
case "ENDERMAN":
|
||||||
|
case "CREEPER":
|
||||||
|
case "BLAZE":
|
||||||
|
case "SNOWMAN":
|
||||||
|
case "SHULKER":
|
||||||
|
case "GUARDIAN":
|
||||||
|
case "ELDER_GUARDIAN":
|
||||||
|
case "SKELETON":
|
||||||
|
case "WITHER_SKELETON":
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
case "IRON_GOLEM":
|
||||||
case "IRON_GOLEM" -> {
|
|
||||||
if (this.dataByte != 0) {
|
if (this.dataByte != 0) {
|
||||||
((IronGolem) entity).setPlayerCreated(true);
|
((IronGolem) entity).setPlayerCreated(true);
|
||||||
}
|
}
|
||||||
restoreLiving((LivingEntity) entity);
|
restoreLiving((LivingEntity) entity);
|
||||||
return entity;
|
return entity;
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
if (Settings.DEBUG) {
|
if (Settings.DEBUG) {
|
||||||
LOGGER.info("Could not identify entity: {}", entity.getType());
|
LOGGER.info("Could not identify entity: {}", entity.getType());
|
||||||
}
|
}
|
||||||
return entity;
|
return entity;
|
||||||
}
|
|
||||||
// END LIVING
|
// END LIVING
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,6 +24,7 @@ import com.plotsquared.core.generator.IndependentPlotGenerator;
|
|||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
import com.plotsquared.core.location.UncheckedWorldLocation;
|
import com.plotsquared.core.location.UncheckedWorldLocation;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.plot.world.SinglePlotArea;
|
import com.plotsquared.core.plot.world.SinglePlotArea;
|
||||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
@ -46,6 +47,17 @@ final class BlockStatePopulator extends BlockPopulator {
|
|||||||
this.plotGenerator = plotGenerator;
|
this.plotGenerator = plotGenerator;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @deprecated Use {@link BlockStatePopulator#BlockStatePopulator(IndependentPlotGenerator)} as plotAreManager is unused
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.9.0")
|
||||||
|
public BlockStatePopulator(
|
||||||
|
final @NonNull IndependentPlotGenerator plotGenerator,
|
||||||
|
final @NonNull PlotAreaManager plotAreaManager
|
||||||
|
) {
|
||||||
|
this.plotGenerator = plotGenerator;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void populate(
|
public void populate(
|
||||||
@NonNull final WorldInfo worldInfo,
|
@NonNull final WorldInfo worldInfo,
|
||||||
|
@ -34,12 +34,9 @@ import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
|||||||
import com.plotsquared.core.util.ChunkManager;
|
import com.plotsquared.core.util.ChunkManager;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.math.BlockVector2;
|
import com.sk89q.worldedit.math.BlockVector2;
|
||||||
import com.sk89q.worldedit.math.BlockVector3;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.bukkit.HeightMap;
|
import org.bukkit.HeightMap;
|
||||||
import org.bukkit.NamespacedKey;
|
|
||||||
import org.bukkit.Registry;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Biome;
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.generator.BiomeProvider;
|
import org.bukkit.generator.BiomeProvider;
|
||||||
@ -51,14 +48,10 @@ import org.jetbrains.annotations.NotNull;
|
|||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.EnumSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static java.util.function.Predicate.not;
|
|
||||||
|
|
||||||
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
|
public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrapper<ChunkGenerator> {
|
||||||
|
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitPlotGenerator.class.getSimpleName());
|
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + BukkitPlotGenerator.class.getSimpleName());
|
||||||
@ -284,14 +277,9 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
return super.getBaseHeight(worldInfo, random, x, z, heightMap);
|
return super.getBaseHeight(worldInfo, random, x, z, heightMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* The entire method is deprecated, but kept for compatibility with versions lower than or equal to 1.16.2.
|
|
||||||
* The method will be removed in future versions, because WorldEdit and FastAsyncWorldEdit only support the latest point
|
|
||||||
* release.
|
|
||||||
*/
|
|
||||||
@SuppressWarnings("deprecation") // The entire method is deprecated, but kept for compatibility with <=1.16.2
|
@SuppressWarnings("deprecation") // The entire method is deprecated, but kept for compatibility with <=1.16.2
|
||||||
@Override
|
@Override
|
||||||
@Deprecated(since = "7.0.0")
|
@Deprecated(since = "TODO")
|
||||||
public @NonNull ChunkData generateChunkData(
|
public @NonNull ChunkData generateChunkData(
|
||||||
@NonNull World world, @NonNull Random random, int x, int z, @NonNull BiomeGrid biome
|
@NonNull World world, @NonNull Random random, int x, int z, @NonNull BiomeGrid biome
|
||||||
) {
|
) {
|
||||||
@ -299,8 +287,8 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
if (this.platformGenerator != this) {
|
if (this.platformGenerator != this) {
|
||||||
return this.platformGenerator.generateChunkData(world, random, x, z, biome);
|
return this.platformGenerator.generateChunkData(world, random, x, z, biome);
|
||||||
} else {
|
} else {
|
||||||
// Throw exception to be caught by the server that indicates the new generation API is being used.
|
// Return super as it will throw an exception caught by the server that will mean this method is no longer used.
|
||||||
throw new UnsupportedOperationException("Using new generation methods. This method is unsupported.");
|
return super.generateChunkData(world, random, x, z, biome);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -421,14 +409,9 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
if (lastPlotArea != null && name.equals(this.levelName) && chunkX == lastChunkX && chunkZ == lastChunkZ) {
|
if (lastPlotArea != null && name.equals(this.levelName) && chunkX == lastChunkX && chunkZ == lastChunkZ) {
|
||||||
return lastPlotArea;
|
return lastPlotArea;
|
||||||
}
|
}
|
||||||
BlockVector3 loc = BlockVector3.at(chunkX << 4, 0, chunkZ << 4);
|
PlotArea area = UncheckedWorldLocation.at(name, chunkX << 4, 0, chunkZ << 4).getPlotArea();
|
||||||
if (lastPlotArea != null && lastPlotArea.getRegion().contains(loc) && lastPlotArea.getRegion().contains(loc)) {
|
|
||||||
return lastPlotArea;
|
|
||||||
}
|
|
||||||
PlotArea area = UncheckedWorldLocation.at(name, loc).getPlotArea();
|
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
throw new IllegalStateException(String.format(
|
throw new IllegalStateException(String.format("Cannot generate chunk that does not belong to a plot area. World: %s",
|
||||||
"Cannot generate chunk that does not belong to a plot area. World: %s",
|
|
||||||
name
|
name
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -445,16 +428,9 @@ public class BukkitPlotGenerator extends ChunkGenerator implements GeneratorWrap
|
|||||||
private static final List<Biome> BIOMES;
|
private static final List<Biome> BIOMES;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
Set<Biome> disabledBiomes = EnumSet.of(Biome.CUSTOM);
|
ArrayList<Biome> biomes = new ArrayList<>(List.of(Biome.values()));
|
||||||
if (PlotSquared.platform().serverVersion()[1] <= 19) {
|
biomes.remove(Biome.CUSTOM);
|
||||||
final Biome cherryGrove = Registry.BIOME.get(NamespacedKey.minecraft("cherry_grove"));
|
BIOMES = List.copyOf(biomes);
|
||||||
if (cherryGrove != null) {
|
|
||||||
disabledBiomes.add(cherryGrove);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BIOMES = Arrays.stream(Biome.values())
|
|
||||||
.filter(not(disabledBiomes::contains))
|
|
||||||
.toList();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,6 +33,7 @@ import org.bukkit.Chunk;
|
|||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.generator.BlockPopulator;
|
import org.bukkit.generator.BlockPopulator;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
@ -50,7 +51,7 @@ final class LegacyBlockStatePopulator extends BlockPopulator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void populate(@NonNull final World world, @NonNull final Random random, @NonNull final Chunk source) {
|
public void populate(@NotNull final World world, @NotNull final Random random, @NotNull final Chunk source) {
|
||||||
int chunkMinX = source.getX() << 4;
|
int chunkMinX = source.getX() << 4;
|
||||||
int chunkMinZ = source.getZ() << 4;
|
int chunkMinZ = source.getZ() << 4;
|
||||||
PlotArea area = Location.at(world.getName(), chunkMinX, 0, chunkMinZ).getPlotArea();
|
PlotArea area = Location.at(world.getName(), chunkMinX, 0, chunkMinZ).getPlotArea();
|
||||||
|
@ -55,7 +55,7 @@ import com.plotsquared.core.plot.flag.implementations.VineGrowFlag;
|
|||||||
import com.plotsquared.core.plot.flag.types.BlockTypeWrapper;
|
import com.plotsquared.core.plot.flag.types.BlockTypeWrapper;
|
||||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import com.plotsquared.core.util.task.TaskTime;
|
import com.plotsquared.core.util.task.TaskTime;
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
@ -71,8 +71,6 @@ import org.bukkit.block.Block;
|
|||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.block.BlockState;
|
import org.bukkit.block.BlockState;
|
||||||
import org.bukkit.block.data.BlockData;
|
import org.bukkit.block.data.BlockData;
|
||||||
import org.bukkit.block.data.type.Dispenser;
|
|
||||||
import org.bukkit.block.data.type.Farmland;
|
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.Fireball;
|
import org.bukkit.entity.Fireball;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -100,9 +98,9 @@ import org.bukkit.event.block.BlockSpreadEvent;
|
|||||||
import org.bukkit.event.block.CauldronLevelChangeEvent;
|
import org.bukkit.event.block.CauldronLevelChangeEvent;
|
||||||
import org.bukkit.event.block.EntityBlockFormEvent;
|
import org.bukkit.event.block.EntityBlockFormEvent;
|
||||||
import org.bukkit.event.block.LeavesDecayEvent;
|
import org.bukkit.event.block.LeavesDecayEvent;
|
||||||
import org.bukkit.event.block.MoistureChangeEvent;
|
|
||||||
import org.bukkit.event.block.SpongeAbsorbEvent;
|
import org.bukkit.event.block.SpongeAbsorbEvent;
|
||||||
import org.bukkit.event.world.StructureGrowEvent;
|
import org.bukkit.event.world.StructureGrowEvent;
|
||||||
|
import org.bukkit.material.Directional;
|
||||||
import org.bukkit.projectiles.BlockProjectileSource;
|
import org.bukkit.projectiles.BlockProjectileSource;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
@ -112,12 +110,6 @@ import java.util.List;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
import static org.bukkit.Tag.CORALS;
|
|
||||||
import static org.bukkit.Tag.CORAL_BLOCKS;
|
|
||||||
import static org.bukkit.Tag.WALL_CORALS;
|
|
||||||
|
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class BlockEventListener implements Listener {
|
public class BlockEventListener implements Listener {
|
||||||
@ -130,11 +122,6 @@ public class BlockEventListener implements Listener {
|
|||||||
Material.TURTLE_EGG,
|
Material.TURTLE_EGG,
|
||||||
Material.TURTLE_SPAWN_EGG
|
Material.TURTLE_SPAWN_EGG
|
||||||
);
|
);
|
||||||
private static final Set<Material> SNOW = Stream.of(Material.values()) // needed as Tag.SNOW isn't present in 1.16.5
|
|
||||||
.filter(material -> material.name().contains("SNOW"))
|
|
||||||
.filter(Material::isBlock)
|
|
||||||
.collect(Collectors.toUnmodifiableSet());
|
|
||||||
|
|
||||||
private final PlotAreaManager plotAreaManager;
|
private final PlotAreaManager plotAreaManager;
|
||||||
private final WorldEdit worldEdit;
|
private final WorldEdit worldEdit;
|
||||||
|
|
||||||
@ -173,7 +160,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, RedstoneFlag.class, false)) {
|
if (area.isRoadFlags() && !area.getRoadFlag(RedstoneFlag.class)) {
|
||||||
event.setNewCurrent(0);
|
event.setNewCurrent(0);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -279,7 +266,9 @@ public class BlockEventListener implements Listener {
|
|||||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
BukkitPlayer pp = BukkitUtil.adapt(player);
|
||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if (area.notifyIfOutsideBuildArea(pp, location.getY())) {
|
if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area
|
||||||
|
.getMinBuildHeight()) && !Permissions
|
||||||
|
.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("height.height_limit"),
|
TranslatableCaption.of("height.height_limit"),
|
||||||
@ -288,10 +277,9 @@ public class BlockEventListener implements Listener {
|
|||||||
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
|
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (!plot.hasOwner()) {
|
if (!plot.hasOwner()) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -311,7 +299,7 @@ public class BlockEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -325,7 +313,7 @@ public class BlockEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("done.building_restricted")
|
TranslatableCaption.of("done.building_restricted")
|
||||||
);
|
);
|
||||||
@ -341,7 +329,7 @@ public class BlockEventListener implements Listener {
|
|||||||
+ " did not fall because of disable-physics = true");
|
+ " did not fall because of disable-physics = true");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
} else if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -366,7 +354,8 @@ public class BlockEventListener implements Listener {
|
|||||||
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
||||||
// == rather than <= as we only care about the "ground level" not being destroyed
|
// == rather than <= as we only care about the "ground level" not being destroyed
|
||||||
if (event.getBlock().getY() == area.getMinGenHeight()) {
|
if (event.getBlock().getY() == area.getMinGenHeight()) {
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
|
if (!Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_GROUNDLEVEL)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -377,7 +366,9 @@ public class BlockEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if (area.notifyIfOutsideBuildArea(plotPlayer, location.getY())) {
|
} else if ((location.getY() >= area.getMaxBuildHeight() || location.getY() < area
|
||||||
|
.getMinBuildHeight()) && !Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("height.height_limit"),
|
TranslatableCaption.of("height.height_limit"),
|
||||||
@ -386,10 +377,10 @@ public class BlockEventListener implements Listener {
|
|||||||
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
|
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (!plot.hasOwner()) {
|
if (!plot.hasOwner()) {
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED, true)) {
|
if (!Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_UNOWNED, true)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -403,7 +394,8 @@ public class BlockEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
if (Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
@ -415,7 +407,7 @@ public class BlockEventListener implements Listener {
|
|||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("done.building_restricted")
|
TranslatableCaption.of("done.building_restricted")
|
||||||
);
|
);
|
||||||
@ -426,7 +418,7 @@ public class BlockEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
BukkitPlayer pp = BukkitUtil.adapt(player);
|
||||||
if (pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.worldEdit != null && pp.getAttribute("worldedit")) {
|
if (this.worldEdit != null && pp.getAttribute("worldedit")) {
|
||||||
@ -478,7 +470,6 @@ public class BlockEventListener implements Listener {
|
|||||||
case "TWISTING_VINES":
|
case "TWISTING_VINES":
|
||||||
case "CAVE_VINES":
|
case "CAVE_VINES":
|
||||||
case "VINE":
|
case "VINE":
|
||||||
case "GLOW_BERRIES":
|
|
||||||
if (!plot.getFlag(VineGrowFlag.class)) {
|
if (!plot.getFlag(VineGrowFlag.class)) {
|
||||||
plot.debug("Vine could not grow because vine-grow = false");
|
plot.debug("Vine could not grow because vine-grow = false");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -514,18 +505,18 @@ public class BlockEventListener implements Listener {
|
|||||||
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if (!plot.hasOwner()) {
|
if (!plot.hasOwner()) {
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else if (!plot.isAdded(plotPlayer.getUUID())) {
|
} else if (!plot.isAdded(plotPlayer.getUUID())) {
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.worldEdit != null && plotPlayer.getAttribute("worldedit")) {
|
if (this.worldEdit != null && plotPlayer.getAttribute("worldedit")) {
|
||||||
@ -569,7 +560,7 @@ public class BlockEventListener implements Listener {
|
|||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!area.buildRangeContainsY(location.getY())) {
|
if (location.getY() >= area.getMaxBuildHeight() || location.getY() < area.getMinBuildHeight()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -670,7 +661,8 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
if (!plot.hasOwner()) {
|
if (!plot.hasOwner()) {
|
||||||
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
if (Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -682,7 +674,8 @@ public class BlockEventListener implements Listener {
|
|||||||
Block block = event.getBlock();
|
Block block = event.getBlock();
|
||||||
if (destroy
|
if (destroy
|
||||||
.contains(BlockTypeWrapper.get(BukkitAdapter.asBlockType(block.getType())))
|
.contains(BlockTypeWrapper.get(BukkitAdapter.asBlockType(block.getType())))
|
||||||
|| plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
|| Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
plot.debug(player.getName() + " could not break " + block.getType()
|
plot.debug(player.getName() + " could not break " + block.getType()
|
||||||
@ -693,7 +686,7 @@ public class BlockEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -734,7 +727,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (CORAL_BLOCKS.isTagged(blockType) || CORALS.isTagged(blockType) || WALL_CORALS.isTagged(blockType)) {
|
if (org.bukkit.Tag.CORAL_BLOCKS.isTagged(blockType) || org.bukkit.Tag.CORALS.isTagged(blockType)) {
|
||||||
if (!plot.getFlag(CoralDryFlag.class)) {
|
if (!plot.getFlag(CoralDryFlag.class)) {
|
||||||
plot.debug("Coral could not dry because coral-dry = false");
|
plot.debug("Coral could not dry because coral-dry = false");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -742,43 +735,6 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
|
||||||
public void onMoistureChange(MoistureChangeEvent event) {
|
|
||||||
Block block = event.getBlock();
|
|
||||||
Location location = BukkitUtil.adapt(block.getLocation());
|
|
||||||
PlotArea area = location.getPlotArea();
|
|
||||||
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Plot plot = area.getOwnedPlot(location);
|
|
||||||
|
|
||||||
if (plot == null) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (block.getBlockData() instanceof Farmland farmland && event
|
|
||||||
.getNewState()
|
|
||||||
.getBlockData() instanceof Farmland newFarmland) {
|
|
||||||
int currentMoisture = farmland.getMoisture();
|
|
||||||
int newMoisture = newFarmland.getMoisture();
|
|
||||||
|
|
||||||
// farmland gets moisturizes
|
|
||||||
if (newMoisture > currentMoisture) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plot.getFlag(SoilDryFlag.class)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
plot.debug("Soil could not dry because soil-dry = false");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onChange(BlockFromToEvent event) {
|
public void onChange(BlockFromToEvent event) {
|
||||||
Block fromBlock = event.getBlock();
|
Block fromBlock = event.getBlock();
|
||||||
@ -806,7 +762,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!toArea.buildRangeContainsY(toLocation.getY())) {
|
if (toLocation.getY() >= toArea.getMaxBuildHeight() || toLocation.getY() < toArea.getMinBuildHeight()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -824,10 +780,7 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (toPlot != null) {
|
if (toPlot != null) {
|
||||||
if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(
|
if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(toPlot, toArea.getOwnedPlot(fromLocation))) {
|
||||||
toPlot,
|
|
||||||
toArea.getOwnedPlot(fromLocation)
|
|
||||||
)) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -843,10 +796,7 @@ public class BlockEventListener implements Listener {
|
|||||||
toPlot.debug("Liquid could not flow because liquid-flow = disabled");
|
toPlot.debug("Liquid could not flow because liquid-flow = disabled");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(
|
} else if (!toArea.contains(fromLocation.getX(), fromLocation.getZ()) || !Objects.equals(null, toArea.getOwnedPlot(fromLocation))) {
|
||||||
null,
|
|
||||||
toArea.getOwnedPlot(fromLocation)
|
|
||||||
)) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (event.getBlock().isLiquid()) {
|
} else if (event.getBlock().isLiquid()) {
|
||||||
final org.bukkit.Location location = event.getBlock().getLocation();
|
final org.bukkit.Location location = event.getBlock().getLocation();
|
||||||
@ -886,11 +836,6 @@ public class BlockEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!area.buildRangeContainsY(location.getY())) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null || !plot.getFlag(CropGrowFlag.class)) {
|
if (plot == null || !plot.getFlag(CropGrowFlag.class)) {
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
@ -934,16 +879,15 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
for (Block block1 : event.getBlocks()) {
|
for (Block block1 : event.getBlocks()) {
|
||||||
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
||||||
Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
|
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(
|
||||||
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(newLoc)) {
|
bloc.getX() + relative.getBlockX(),
|
||||||
|
bloc.getZ() + relative.getBlockZ()
|
||||||
|
)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot.equals(area.getOwnedPlot(newLoc))) {
|
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot
|
||||||
event.setCancelled(true);
|
.equals(area.getOwnedPlot(bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())))) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!area.buildRangeContainsY(bloc.getY()) || !area.buildRangeContainsY(newLoc.getY())) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -969,8 +913,9 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
for (Block block1 : event.getBlocks()) {
|
for (Block block1 : event.getBlocks()) {
|
||||||
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
||||||
Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
|
if (bloc.isPlotArea() || bloc
|
||||||
if (bloc.isPlotArea() || newLoc.isPlotArea()) {
|
.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())
|
||||||
|
.isPlotArea()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -984,16 +929,15 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
for (Block block1 : event.getBlocks()) {
|
for (Block block1 : event.getBlocks()) {
|
||||||
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
Location bloc = BukkitUtil.adapt(block1.getLocation());
|
||||||
Location newLoc = bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ());
|
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(
|
||||||
if (!area.contains(bloc.getX(), bloc.getZ()) || !area.contains(newLoc)) {
|
bloc.getX() + relative.getBlockX(),
|
||||||
|
bloc.getZ() + relative.getBlockZ()
|
||||||
|
)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot.equals(area.getOwnedPlot(newLoc))) {
|
if (!plot.equals(area.getOwnedPlot(bloc)) || !plot
|
||||||
event.setCancelled(true);
|
.equals(area.getOwnedPlot(bloc.add(relative.getBlockX(), relative.getBlockY(), relative.getBlockZ())))) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!area.buildRangeContainsY(bloc.getY()) || !area.buildRangeContainsY(newLoc.getY())) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1002,9 +946,6 @@ public class BlockEventListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onBlockDispense(BlockDispenseEvent event) {
|
public void onBlockDispense(BlockDispenseEvent event) {
|
||||||
if (!this.plotAreaManager.hasPlotArea(event.getBlock().getWorld().getName())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Material type = event.getItem().getType();
|
Material type = event.getItem().getType();
|
||||||
switch (type.toString()) {
|
switch (type.toString()) {
|
||||||
case "SHULKER_BOX", "WHITE_SHULKER_BOX", "ORANGE_SHULKER_BOX", "MAGENTA_SHULKER_BOX", "LIGHT_BLUE_SHULKER_BOX",
|
case "SHULKER_BOX", "WHITE_SHULKER_BOX", "ORANGE_SHULKER_BOX", "MAGENTA_SHULKER_BOX", "LIGHT_BLUE_SHULKER_BOX",
|
||||||
@ -1016,15 +957,10 @@ public class BlockEventListener implements Listener {
|
|||||||
if (event.getBlock().getType() == Material.DROPPER) {
|
if (event.getBlock().getType() == Material.DROPPER) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BlockFace targetFace = ((Dispenser) event.getBlock().getBlockData()).getFacing();
|
BlockFace targetFace = ((Directional) event.getBlock().getState().getData()).getFacing();
|
||||||
Location location = BukkitUtil.adapt(event.getBlock().getRelative(targetFace).getLocation());
|
Location location = BukkitUtil.adapt(event.getBlock().getRelative(targetFace).getLocation());
|
||||||
if (location.isPlotRoad()) {
|
if (location.isPlotRoad()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
|
||||||
}
|
|
||||||
PlotArea area = location.getPlotArea();
|
|
||||||
if (area != null && !area.buildRangeContainsY(location.getY())) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1064,10 +1000,6 @@ public class BlockEventListener implements Listener {
|
|||||||
Plot plot = area.getOwnedPlot(location);
|
Plot plot = area.getOwnedPlot(location);
|
||||||
if (!Objects.equals(plot, origin)) {
|
if (!Objects.equals(plot, origin)) {
|
||||||
event.getBlocks().remove(i);
|
event.getBlocks().remove(i);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!area.buildRangeContainsY(location.getY())) {
|
|
||||||
event.getBlocks().remove(i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1116,7 +1048,6 @@ public class BlockEventListener implements Listener {
|
|||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plot.debug("Explosion was cancelled because explosion = false");
|
plot.debug("Explosion was cancelled because explosion = false");
|
||||||
}
|
}
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
event.blockList().removeIf(blox -> !plot.equals(area.getOwnedPlot(BukkitUtil.adapt(blox.getLocation()))));
|
event.blockList().removeIf(blox -> !plot.equals(area.getOwnedPlot(BukkitUtil.adapt(blox.getLocation()))));
|
||||||
}
|
}
|
||||||
@ -1160,14 +1091,8 @@ public class BlockEventListener implements Listener {
|
|||||||
Plot plot = area.getOwnedPlot(location1);
|
Plot plot = area.getOwnedPlot(location1);
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
BukkitPlayer pp = BukkitUtil.adapt(player);
|
BukkitPlayer pp = BukkitUtil.adapt(player);
|
||||||
if (area.notifyIfOutsideBuildArea(pp, location1.getY())) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !pp.hasPermission(
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||||
Permission.PERMISSION_ADMIN_BUILD_ROAD
|
|
||||||
)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1178,9 +1103,7 @@ public class BlockEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, BlockIgnitionFlag.class, true) && !pp.hasPermission(
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||||
Permission.PERMISSION_ADMIN_BUILD_UNOWNED
|
|
||||||
)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1191,7 +1114,7 @@ public class BlockEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1284,10 +1207,7 @@ public class BlockEventListener implements Listener {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
Plot plot = area.getOwnedPlot(blockLocation);
|
Plot plot = area.getOwnedPlot(blockLocation);
|
||||||
if (!Objects.equals(plot, origin)) {
|
return !Objects.equals(plot, origin);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return !area.buildRangeContainsY(location.getY());
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (blocks.isEmpty()) {
|
if (blocks.isEmpty()) {
|
||||||
@ -1318,7 +1238,8 @@ public class BlockEventListener implements Listener {
|
|||||||
|
|
||||||
for (final BlockState state : event.getReplacedBlockStates()) {
|
for (final BlockState state : event.getReplacedBlockStates()) {
|
||||||
Location currentLocation = BukkitUtil.adapt(state.getLocation());
|
Location currentLocation = BukkitUtil.adapt(state.getLocation());
|
||||||
if (!pp.hasPermission(
|
if (!Permissions.hasPermission(
|
||||||
|
pp,
|
||||||
Permission.PERMISSION_ADMIN_BUILD_ROAD
|
Permission.PERMISSION_ADMIN_BUILD_ROAD
|
||||||
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
|
) && !(Objects.equals(currentLocation.getPlot(), plot))) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
@ -1328,7 +1249,7 @@ public class BlockEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_HEIGHT_LIMIT)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (currentLocation.getY() >= area.getMaxBuildHeight() || currentLocation.getY() < area.getMinBuildHeight()) {
|
if (currentLocation.getY() >= area.getMaxBuildHeight() || currentLocation.getY() < area.getMinBuildHeight()) {
|
||||||
@ -1339,7 +1260,6 @@ public class BlockEventListener implements Listener {
|
|||||||
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
|
.tag("maxheight", Tag.inserting(Component.text(area.getMaxBuildHeight())))
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
if (area.notifyIfOutsideBuildArea(pp, currentLocation.getY())) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1347,5 +1267,3 @@ public class BlockEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
|
||||||
|
@ -26,8 +26,6 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
|
import com.plotsquared.core.plot.flag.implementations.CopperOxideFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
|
import com.plotsquared.core.plot.flag.implementations.MiscInteractFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.SculkSensorInteractFlag;
|
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
@ -82,27 +80,13 @@ public class BlockEventListener117 implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
BukkitPlayer plotPlayer = null;
|
|
||||||
|
|
||||||
if (entity instanceof Player player) {
|
|
||||||
plotPlayer = BukkitUtil.adapt(player);
|
|
||||||
if (area.notifyIfOutsideBuildArea(plotPlayer, location.getY())) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null && !PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(
|
if (plot == null || !plot.getFlag(MiscInteractFlag.class)) {
|
||||||
area,
|
if (entity instanceof Player player) {
|
||||||
MiscInteractFlag.class,
|
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
||||||
true
|
|
||||||
) || plot != null && (!plot.getFlag(MiscInteractFlag.class) || !plot.getFlag(SculkSensorInteractFlag.class))) {
|
|
||||||
if (plotPlayer != null) {
|
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if (!plot.isAdded(plotPlayer.getUUID())) {
|
if (!plot.isAdded(plotPlayer.getUUID())) {
|
||||||
plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because both " +
|
plot.debug(plotPlayer.getName() + " couldn't trigger sculk sensors because misc-interact = false");
|
||||||
"sculk-sensor-interact and misc-interact = false");
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,17 +95,9 @@ public class BlockEventListener117 implements Listener {
|
|||||||
if (entity instanceof Item item) {
|
if (entity instanceof Item item) {
|
||||||
UUID itemThrower = item.getThrower();
|
UUID itemThrower = item.getThrower();
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if (itemThrower == null && (itemThrower = item.getOwner()) == null) {
|
|
||||||
plot.debug(
|
|
||||||
"A thrown item couldn't trigger sculk sensors because both sculk-sensor-interact and " +
|
|
||||||
"misc-interact = false and the item's owner could not be resolved.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!plot.isAdded(itemThrower)) {
|
if (!plot.isAdded(itemThrower)) {
|
||||||
if (!plot.isAdded(itemThrower)) {
|
if (!plot.isAdded(itemThrower)) {
|
||||||
plot.debug("A thrown item couldn't trigger sculk sensors because both sculk-sensor-interact and " +
|
plot.debug("A thrown item couldn't trigger sculk sensors because misc-interact = false");
|
||||||
"misc-interact = false");
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -139,11 +115,12 @@ public class BlockEventListener117 implements Listener {
|
|||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
for (int i = blocks.size() - 1; i >= 0; i--) {
|
for (int i = blocks.size() - 1; i >= 0; i--) {
|
||||||
Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
|
location = BukkitUtil.adapt(blocks.get(i).getLocation());
|
||||||
if (blockLocation.isPlotArea()) {
|
if (location.isPlotArea()) {
|
||||||
blocks.remove(i);
|
blocks.remove(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return;
|
||||||
} else {
|
} else {
|
||||||
Plot origin = area.getOwnedPlot(location);
|
Plot origin = area.getOwnedPlot(location);
|
||||||
if (origin == null) {
|
if (origin == null) {
|
||||||
@ -151,22 +128,30 @@ public class BlockEventListener117 implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (int i = blocks.size() - 1; i >= 0; i--) {
|
for (int i = blocks.size() - 1; i >= 0; i--) {
|
||||||
Location blockLocation = BukkitUtil.adapt(blocks.get(i).getLocation());
|
location = BukkitUtil.adapt(blocks.get(i).getLocation());
|
||||||
if (!area.contains(blockLocation.getX(), blockLocation.getZ())) {
|
if (!area.contains(location.getX(), location.getZ())) {
|
||||||
blocks.remove(i);
|
blocks.remove(i);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Plot plot = area.getOwnedPlot(blockLocation);
|
Plot plot = area.getOwnedPlot(location);
|
||||||
if (!Objects.equals(plot, origin)) {
|
if (!Objects.equals(plot, origin)) {
|
||||||
event.getBlocks().remove(i);
|
event.getBlocks().remove(i);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
if (!area.buildRangeContainsY(location.getY())) {
|
}
|
||||||
|
}
|
||||||
|
Plot origin = area.getPlot(location);
|
||||||
|
if (origin == null) {
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (int i = blocks.size() - 1; i >= 0; i--) {
|
||||||
|
location = BukkitUtil.adapt(blocks.get(i).getLocation());
|
||||||
|
Plot plot = area.getOwnedPlot(location);
|
||||||
|
if (!Objects.equals(plot, origin) && (!plot.isMerged() && !origin.isMerged())) {
|
||||||
event.getBlocks().remove(i);
|
event.getBlocks().remove(i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
public void onBlockForm(BlockFormEvent event) {
|
public void onBlockForm(BlockFormEvent event) {
|
||||||
|
@ -26,7 +26,6 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.plot.world.SinglePlotArea;
|
import com.plotsquared.core.plot.world.SinglePlotArea;
|
||||||
import com.plotsquared.core.util.ReflectionUtils;
|
|
||||||
import com.plotsquared.core.util.ReflectionUtils.RefClass;
|
import com.plotsquared.core.util.ReflectionUtils.RefClass;
|
||||||
import com.plotsquared.core.util.ReflectionUtils.RefField;
|
import com.plotsquared.core.util.ReflectionUtils.RefField;
|
||||||
import com.plotsquared.core.util.ReflectionUtils.RefMethod;
|
import com.plotsquared.core.util.ReflectionUtils.RefMethod;
|
||||||
@ -65,11 +64,9 @@ public class ChunkListener implements Listener {
|
|||||||
private final PlotAreaManager plotAreaManager;
|
private final PlotAreaManager plotAreaManager;
|
||||||
private final int version;
|
private final int version;
|
||||||
|
|
||||||
private RefMethod methodSetUnsaved;
|
|
||||||
private RefMethod methodGetHandleChunk;
|
private RefMethod methodGetHandleChunk;
|
||||||
private RefMethod methodGetHandleWorld;
|
private RefMethod methodGetHandleWorld;
|
||||||
private RefField mustNotSave;
|
private RefField mustSave;
|
||||||
private Object objChunkStatusFull = null;
|
|
||||||
/*
|
/*
|
||||||
private RefMethod methodGetFullChunk;
|
private RefMethod methodGetFullChunk;
|
||||||
private RefMethod methodGetBukkitChunk;
|
private RefMethod methodGetBukkitChunk;
|
||||||
@ -82,6 +79,7 @@ public class ChunkListener implements Listener {
|
|||||||
*/
|
*/
|
||||||
private Chunk lastChunk;
|
private Chunk lastChunk;
|
||||||
private boolean ignoreUnload = false;
|
private boolean ignoreUnload = false;
|
||||||
|
private boolean isTrueForNotSave = true;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public ChunkListener(final @NonNull PlotAreaManager plotAreaManager) {
|
public ChunkListener(final @NonNull PlotAreaManager plotAreaManager) {
|
||||||
@ -92,27 +90,22 @@ public class ChunkListener implements Listener {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
RefClass classCraftWorld = getRefClass("{cb}.CraftWorld");
|
RefClass classCraftWorld = getRefClass("{cb}.CraftWorld");
|
||||||
|
this.methodGetHandleWorld = classCraftWorld.getMethod("getHandle");
|
||||||
RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
||||||
ReflectionUtils.RefClass classChunkAccess = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
|
|
||||||
this.methodSetUnsaved = classChunkAccess.getMethod("a", boolean.class);
|
|
||||||
try {
|
|
||||||
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle");
|
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle");
|
||||||
} catch (NoSuchMethodException ignored) {
|
|
||||||
try {
|
|
||||||
RefClass classChunkStatus = getRefClass("net.minecraft.world.level.chunk.ChunkStatus");
|
|
||||||
this.objChunkStatusFull = classChunkStatus.getRealClass().getField("n").get(null);
|
|
||||||
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle", classChunkStatus.getRealClass());
|
|
||||||
} catch (NoSuchMethodException ex) {
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
try {
|
try {
|
||||||
if (version < 17) {
|
if (version < 17) {
|
||||||
RefClass classChunk = getRefClass("{nms}.Chunk");
|
RefClass classChunk = getRefClass("{nms}.Chunk");
|
||||||
this.mustNotSave = classChunk.getField("mustNotSave");
|
if (version == 13) {
|
||||||
|
this.mustSave = classChunk.getField("mustSave");
|
||||||
|
this.isTrueForNotSave = false;
|
||||||
|
} else {
|
||||||
|
this.mustSave = classChunk.getField("mustNotSave");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
||||||
this.mustNotSave = classChunk.getField("mustNotSave");
|
this.mustSave = classChunk.getField("mustNotSave");
|
||||||
|
|
||||||
}
|
}
|
||||||
} catch (NoSuchFieldException e) {
|
} catch (NoSuchFieldException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -174,13 +167,10 @@ public class ChunkListener implements Listener {
|
|||||||
if (safe && shouldSave(world, chunk.getX(), chunk.getZ())) {
|
if (safe && shouldSave(world, chunk.getX(), chunk.getZ())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
Object c = objChunkStatusFull != null
|
Object c = this.methodGetHandleChunk.of(chunk).call();
|
||||||
? this.methodGetHandleChunk.of(chunk).call(objChunkStatusFull)
|
RefField.RefExecutor field = this.mustSave.of(c);
|
||||||
: this.methodGetHandleChunk.of(chunk).call();
|
if ((Boolean) field.get() != isTrueForNotSave) {
|
||||||
RefField.RefExecutor field = this.mustNotSave.of(c);
|
field.set(isTrueForNotSave);
|
||||||
methodSetUnsaved.of(c).call(false);
|
|
||||||
if (!((Boolean) field.get())) {
|
|
||||||
field.set(true);
|
|
||||||
if (chunk.isLoaded()) {
|
if (chunk.isLoaded()) {
|
||||||
ignoreUnload = true;
|
ignoreUnload = true;
|
||||||
chunk.unload(false);
|
chunk.unload(false);
|
||||||
@ -244,8 +234,7 @@ public class ChunkListener implements Listener {
|
|||||||
Chunk chunk = event.getChunk();
|
Chunk chunk = event.getChunk();
|
||||||
if (Settings.Chunk_Processor.AUTO_TRIM) {
|
if (Settings.Chunk_Processor.AUTO_TRIM) {
|
||||||
String world = chunk.getWorld().getName();
|
String world = chunk.getWorld().getName();
|
||||||
if ((!Settings.Enabled_Components.WORLDS || !SinglePlotArea.isSinglePlotWorld(world)) && this.plotAreaManager.hasPlotArea(
|
if ((!Settings.Enabled_Components.WORLDS || !SinglePlotArea.isSinglePlotWorld(world)) && this.plotAreaManager.hasPlotArea(world)) {
|
||||||
world)) {
|
|
||||||
if (unloadChunk(world, chunk, true)) {
|
if (unloadChunk(world, chunk, true)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ import com.plotsquared.core.plot.flag.implementations.ExplosionFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.InvincibleFlag;
|
import com.plotsquared.core.plot.flag.implementations.InvincibleFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.world.block.BlockType;
|
import com.sk89q.worldedit.world.block.BlockType;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -145,38 +145,54 @@ public class EntityEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason();
|
CreatureSpawnEvent.SpawnReason reason = event.getSpawnReason();
|
||||||
switch (reason.toString()) {
|
switch (reason.toString()) {
|
||||||
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> {
|
case "DISPENSE_EGG":
|
||||||
|
case "EGG":
|
||||||
|
case "OCELOT_BABY":
|
||||||
|
case "SPAWNER_EGG":
|
||||||
if (!area.isSpawnEggs()) {
|
if (!area.isSpawnEggs()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL",
|
case "REINFORCEMENTS":
|
||||||
"TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN", "NETHER_PORTAL",
|
case "NATURAL":
|
||||||
"DUPLICATION", "FROZEN", "SPELL" -> {
|
case "MOUNT":
|
||||||
|
case "PATROL":
|
||||||
|
case "RAID":
|
||||||
|
case "SHEARED":
|
||||||
|
case "SILVERFISH_BLOCK":
|
||||||
|
case "ENDER_PEARL":
|
||||||
|
case "TRAP":
|
||||||
|
case "VILLAGE_DEFENSE":
|
||||||
|
case "VILLAGE_INVASION":
|
||||||
|
case "BEEHIVE":
|
||||||
|
case "CHUNK_GEN":
|
||||||
if (!area.isMobSpawning()) {
|
if (!area.isMobSpawning()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "BREEDING" -> {
|
case "BREEDING":
|
||||||
if (!area.isSpawnBreeding()) {
|
if (!area.isSpawnBreeding()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> {
|
case "BUILD_IRONGOLEM":
|
||||||
|
case "BUILD_SNOWMAN":
|
||||||
|
case "BUILD_WITHER":
|
||||||
|
case "CUSTOM":
|
||||||
if (!area.isSpawnCustom() && entity.getType() != EntityType.ARMOR_STAND) {
|
if (!area.isSpawnCustom() && entity.getType() != EntityType.ARMOR_STAND) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "SPAWNER" -> {
|
case "SPAWNER":
|
||||||
if (!area.isMobSpawnerSpawning()) {
|
if (!area.isMobSpawnerSpawning()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
Plot plot = area.getOwnedPlotAbs(location);
|
Plot plot = area.getOwnedPlotAbs(location);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
@ -245,7 +261,7 @@ public class EntityEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, InvincibleFlag.class, true)) {
|
if (area.isRoadFlags() && area.getRoadFlag(InvincibleFlag.class)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -354,13 +370,14 @@ public class EntityEventListener implements Listener {
|
|||||||
if (shooter instanceof Player) {
|
if (shooter instanceof Player) {
|
||||||
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
|
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
if (plot.isAdded(pp.getUUID()) || Permissions
|
||||||
|
.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
entity.remove();
|
entity.remove();
|
||||||
|
@ -126,16 +126,16 @@ public class EntitySpawnListener implements Listener {
|
|||||||
Plot plot = location.getOwnedPlotAbs();
|
Plot plot = location.getOwnedPlotAbs();
|
||||||
EntityType type = entity.getType();
|
EntityType type = entity.getType();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
|
if (!area.isMobSpawning()) {
|
||||||
|
if (type == EntityType.PLAYER) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (type == EntityType.DROPPED_ITEM) {
|
if (type == EntityType.DROPPED_ITEM) {
|
||||||
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
|
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!area.isMobSpawning()) {
|
|
||||||
if (type == EntityType.PLAYER) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (type.isAlive()) {
|
if (type.isAlive()) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.bukkit.listener;
|
package com.plotsquared.bukkit.listener;
|
||||||
|
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
import com.plotsquared.bukkit.player.BukkitPlayer;
|
import com.plotsquared.bukkit.player.BukkitPlayer;
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
@ -25,6 +26,7 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ForcefieldFlag;
|
import com.plotsquared.core.plot.flag.implementations.ForcefieldFlag;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
@ -37,11 +39,8 @@ public class ForceFieldListener {
|
|||||||
|
|
||||||
private static Set<PlotPlayer<?>> getNearbyPlayers(Player player, Plot plot) {
|
private static Set<PlotPlayer<?>> getNearbyPlayers(Player player, Plot plot) {
|
||||||
Set<PlotPlayer<?>> players = new HashSet<>();
|
Set<PlotPlayer<?>> players = new HashSet<>();
|
||||||
for (Player nearPlayer : player.getNearbyEntities(5d, 5d, 5d).stream()
|
for (Player nearPlayer : Iterables
|
||||||
.filter(entity -> entity instanceof Player)
|
.filter(player.getNearbyEntities(5d, 5d, 5d), Player.class)) {
|
||||||
.map(entity -> (Player) entity)
|
|
||||||
.toList()
|
|
||||||
) {
|
|
||||||
PlotPlayer<?> plotPlayer;
|
PlotPlayer<?> plotPlayer;
|
||||||
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
|
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
|
||||||
.equals(plotPlayer.getCurrentPlot())) {
|
.equals(plotPlayer.getCurrentPlot())) {
|
||||||
@ -55,11 +54,8 @@ public class ForceFieldListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static PlotPlayer<?> hasNearbyPermitted(Player player, Plot plot) {
|
private static PlotPlayer<?> hasNearbyPermitted(Player player, Plot plot) {
|
||||||
for (Player nearPlayer : player.getNearbyEntities(5d, 5d, 5d).stream()
|
for (Player nearPlayer : Iterables
|
||||||
.filter(entity -> entity instanceof Player)
|
.filter(player.getNearbyEntities(5d, 5d, 5d), Player.class)) {
|
||||||
.map(entity -> (Player) entity)
|
|
||||||
.toList()
|
|
||||||
) {
|
|
||||||
PlotPlayer<?> plotPlayer;
|
PlotPlayer<?> plotPlayer;
|
||||||
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
|
if ((plotPlayer = BukkitUtil.adapt(nearPlayer)) == null || !plot
|
||||||
.equals(plotPlayer.getCurrentPlot())) {
|
.equals(plotPlayer.getCurrentPlot())) {
|
||||||
@ -108,7 +104,8 @@ public class ForceFieldListener {
|
|||||||
if (plot.isAdded(uuid)) {
|
if (plot.isAdded(uuid)) {
|
||||||
Set<PlotPlayer<?>> players = getNearbyPlayers(player, plot);
|
Set<PlotPlayer<?>> players = getNearbyPlayers(player, plot);
|
||||||
for (PlotPlayer<?> oPlayer : players) {
|
for (PlotPlayer<?> oPlayer : players) {
|
||||||
if (!oPlayer.hasPermission(Permission.PERMISSION_ADMIN_ENTRY_FORCEFIELD)) {
|
if (!Permissions
|
||||||
|
.hasPermission(oPlayer, Permission.PERMISSION_ADMIN_ENTRY_FORCEFIELD)) {
|
||||||
((BukkitPlayer) oPlayer).player
|
((BukkitPlayer) oPlayer).player
|
||||||
.setVelocity(calculateVelocity(plotPlayer, oPlayer));
|
.setVelocity(calculateVelocity(plotPlayer, oPlayer));
|
||||||
}
|
}
|
||||||
@ -118,7 +115,8 @@ public class ForceFieldListener {
|
|||||||
if (oPlayer == null) {
|
if (oPlayer == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_ENTRY_FORCEFIELD)) {
|
if (!Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_ENTRY_FORCEFIELD)) {
|
||||||
player.setVelocity(calculateVelocity(oPlayer, plotPlayer));
|
player.setVelocity(calculateVelocity(oPlayer, plotPlayer));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.bukkit.listener;
|
package com.plotsquared.bukkit.listener;
|
||||||
|
|
||||||
import com.destroystokyo.paper.event.block.BeaconEffectEvent;
|
|
||||||
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
|
import com.destroystokyo.paper.event.entity.EntityPathfindEvent;
|
||||||
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
|
import com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent;
|
||||||
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
|
import com.destroystokyo.paper.event.entity.PreCreatureSpawnEvent;
|
||||||
@ -37,13 +36,10 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.flag.FlagContainer;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||||
import com.plotsquared.core.plot.flag.types.BooleanFlag;
|
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
import com.plotsquared.core.util.Permissions;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
@ -178,56 +174,74 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
CreatureSpawnEvent.SpawnReason reason = event.getReason();
|
CreatureSpawnEvent.SpawnReason reason = event.getReason();
|
||||||
switch (reason.toString()) {
|
switch (reason.toString()) {
|
||||||
case "DISPENSE_EGG", "EGG", "OCELOT_BABY", "SPAWNER_EGG" -> {
|
case "DISPENSE_EGG":
|
||||||
|
case "EGG":
|
||||||
|
case "OCELOT_BABY":
|
||||||
|
case "SPAWNER_EGG":
|
||||||
if (!area.isSpawnEggs()) {
|
if (!area.isSpawnEggs()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "REINFORCEMENTS", "NATURAL", "MOUNT", "PATROL", "RAID", "SHEARED", "SILVERFISH_BLOCK", "ENDER_PEARL", "TRAP", "VILLAGE_DEFENSE", "VILLAGE_INVASION", "BEEHIVE", "CHUNK_GEN" -> {
|
case "REINFORCEMENTS":
|
||||||
|
case "NATURAL":
|
||||||
|
case "MOUNT":
|
||||||
|
case "PATROL":
|
||||||
|
case "RAID":
|
||||||
|
case "SHEARED":
|
||||||
|
case "SILVERFISH_BLOCK":
|
||||||
|
case "ENDER_PEARL":
|
||||||
|
case "TRAP":
|
||||||
|
case "VILLAGE_DEFENSE":
|
||||||
|
case "VILLAGE_INVASION":
|
||||||
|
case "BEEHIVE":
|
||||||
|
case "CHUNK_GEN":
|
||||||
if (!area.isMobSpawning()) {
|
if (!area.isMobSpawning()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "BREEDING" -> {
|
case "BREEDING":
|
||||||
if (!area.isSpawnBreeding()) {
|
if (!area.isSpawnBreeding()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "BUILD_IRONGOLEM", "BUILD_SNOWMAN", "BUILD_WITHER", "CUSTOM" -> {
|
case "BUILD_IRONGOLEM":
|
||||||
|
case "BUILD_SNOWMAN":
|
||||||
|
case "BUILD_WITHER":
|
||||||
|
case "CUSTOM":
|
||||||
if (!area.isSpawnCustom() && event.getType() != EntityType.ARMOR_STAND) {
|
if (!area.isSpawnCustom() && event.getType() != EntityType.ARMOR_STAND) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "SPAWNER" -> {
|
case "SPAWNER":
|
||||||
if (!area.isMobSpawnerSpawning()) {
|
if (!area.isMobSpawnerSpawning()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlotAbs();
|
Plot plot = location.getOwnedPlotAbs();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
EntityType type = event.getType();
|
EntityType type = event.getType();
|
||||||
// PreCreatureSpawnEvent **should** not be called for DROPPED_ITEM, just for the sake of consistency
|
|
||||||
if (type == EntityType.DROPPED_ITEM) {
|
|
||||||
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!area.isMobSpawning()) {
|
if (!area.isMobSpawning()) {
|
||||||
if (type == EntityType.PLAYER) {
|
if (type == EntityType.PLAYER) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (type == EntityType.DROPPED_ITEM) {
|
||||||
|
if (Settings.Enabled_Components.KILL_ROAD_ITEMS) {
|
||||||
|
event.setShouldAbortSpawn(true);
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (type.isAlive()) {
|
if (type.isAlive()) {
|
||||||
event.setShouldAbortSpawn(true);
|
event.setShouldAbortSpawn(true);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -310,17 +324,14 @@ public class PaperListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||||
PlotArea area = location.getPlotArea();
|
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
|
||||||
if (area == null) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter);
|
PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter);
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
|
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !pp.hasPermission(
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) {
|
||||||
Permission.PERMISSION_ADMIN_PROJECTILE_ROAD
|
|
||||||
)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -332,7 +343,7 @@ public class PaperListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -345,7 +356,7 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
if (!plot.getFlag(ProjectilesFlag.class)) {
|
if (!plot.getFlag(ProjectilesFlag.class)) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -400,52 +411,4 @@ public class PaperListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
|
||||||
public void onBeaconEffect(final BeaconEffectEvent event) {
|
|
||||||
Block block = event.getBlock();
|
|
||||||
Location beaconLocation = BukkitUtil.adapt(block.getLocation());
|
|
||||||
Plot beaconPlot = beaconLocation.getPlot();
|
|
||||||
|
|
||||||
PlotArea area = beaconLocation.getPlotArea();
|
|
||||||
if (area == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
Location playerLocation = BukkitUtil.adapt(player.getLocation());
|
|
||||||
|
|
||||||
PlotPlayer<Player> plotPlayer = BukkitUtil.adapt(player);
|
|
||||||
Plot playerStandingPlot = playerLocation.getPlot();
|
|
||||||
if (playerStandingPlot == null) {
|
|
||||||
FlagContainer container = area.getRoadFlagContainer();
|
|
||||||
if (!getBooleanFlagValue(container, BeaconEffectsFlag.class, true) ||
|
|
||||||
(beaconPlot != null && Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FlagContainer container = playerStandingPlot.getFlagContainer();
|
|
||||||
boolean plotBeaconEffects = getBooleanFlagValue(container, BeaconEffectsFlag.class, true);
|
|
||||||
if (playerStandingPlot.equals(beaconPlot)) {
|
|
||||||
if (!plotBeaconEffects) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!plotBeaconEffects || Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean getBooleanFlagValue(
|
|
||||||
@NonNull FlagContainer container,
|
|
||||||
@NonNull Class<? extends BooleanFlag<?>> flagClass,
|
|
||||||
boolean defaultValue
|
|
||||||
) {
|
|
||||||
BooleanFlag<?> flag = container.getFlag(flagClass);
|
|
||||||
return flag == null ? defaultValue : flag.getValue();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* PlotSquared, a land and world management plugin for Minecraft.
|
||||||
|
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
||||||
|
* Copyright (C) IntellectualSites team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.plotsquared.bukkit.listener;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
|
import com.plotsquared.core.configuration.Settings;
|
||||||
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
|
import com.plotsquared.core.location.Location;
|
||||||
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
|
import org.bukkit.block.Banner;
|
||||||
|
import org.bukkit.block.Beacon;
|
||||||
|
import org.bukkit.block.BlockState;
|
||||||
|
import org.bukkit.block.CommandBlock;
|
||||||
|
import org.bukkit.block.Comparator;
|
||||||
|
import org.bukkit.block.Conduit;
|
||||||
|
import org.bukkit.block.Container;
|
||||||
|
import org.bukkit.block.CreatureSpawner;
|
||||||
|
import org.bukkit.block.DaylightDetector;
|
||||||
|
import org.bukkit.block.EnchantingTable;
|
||||||
|
import org.bukkit.block.EndGateway;
|
||||||
|
import org.bukkit.block.EnderChest;
|
||||||
|
import org.bukkit.block.Jukebox;
|
||||||
|
import org.bukkit.block.Sign;
|
||||||
|
import org.bukkit.block.Skull;
|
||||||
|
import org.bukkit.block.Structure;
|
||||||
|
import org.bukkit.block.data.type.Bed;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.block.BlockPlaceEvent;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
public class PaperListener113 extends PaperListener {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public PaperListener113(@NonNull PlotAreaManager plotAreaManager) {
|
||||||
|
super(plotAreaManager);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onBlockPlace(BlockPlaceEvent event) {
|
||||||
|
if (!Settings.Paper_Components.TILE_ENTITY_CHECK || !Settings.Enabled_Components.CHUNK_PROCESSOR) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
BlockState state = event.getBlock().getState(false);
|
||||||
|
if (!(state instanceof Banner || state instanceof Beacon || state instanceof Bed || state instanceof CommandBlock
|
||||||
|
|| state instanceof Comparator || state instanceof Conduit || state instanceof Container || state instanceof CreatureSpawner
|
||||||
|
|| state instanceof DaylightDetector || state instanceof EnchantingTable || state instanceof EnderChest || state instanceof EndGateway
|
||||||
|
|| state instanceof Jukebox || state instanceof Sign || state instanceof Skull || state instanceof Structure)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final Location location = BukkitUtil.adapt(event.getBlock().getLocation());
|
||||||
|
final PlotArea plotArea = location.getPlotArea();
|
||||||
|
if (plotArea == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
final int tileEntityCount = event.getBlock().getChunk().getTileEntities(false).length;
|
||||||
|
if (tileEntityCount >= Settings.Chunk_Processor.MAX_TILES) {
|
||||||
|
final PlotPlayer<?> plotPlayer = BukkitUtil.adapt(event.getPlayer());
|
||||||
|
plotPlayer.sendMessage(
|
||||||
|
TranslatableCaption.of("errors.tile_entity_cap_reached"),
|
||||||
|
TagResolver.resolver("amount", Tag.inserting(Component.text(Settings.Chunk_Processor.MAX_TILES)))
|
||||||
|
);
|
||||||
|
event.setCancelled(true);
|
||||||
|
event.setBuild(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -67,7 +67,7 @@ import com.plotsquared.core.plot.flag.implementations.VillagerInteractFlag;
|
|||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PremiumVerification;
|
import com.plotsquared.core.util.PremiumVerification;
|
||||||
import com.plotsquared.core.util.entity.EntityCategories;
|
import com.plotsquared.core.util.entity.EntityCategories;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
@ -107,7 +107,6 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.entity.EntityPickupItemEvent;
|
import org.bukkit.event.entity.EntityPickupItemEvent;
|
||||||
import org.bukkit.event.entity.EntityPlaceEvent;
|
import org.bukkit.event.entity.EntityPlaceEvent;
|
||||||
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||||
@ -144,7 +143,6 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
import org.bukkit.metadata.FixedMetadataValue;
|
import org.bukkit.metadata.FixedMetadataValue;
|
||||||
import org.bukkit.metadata.MetadataValue;
|
import org.bukkit.metadata.MetadataValue;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.potion.PotionEffect;
|
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@ -159,7 +157,7 @@ import java.util.UUID;
|
|||||||
* Player Events involving plots.
|
* Player Events involving plots.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public class PlayerEventListener implements Listener {
|
public class PlayerEventListener extends PlotListener implements Listener {
|
||||||
|
|
||||||
private static final Set<Material> MINECARTS = Set.of(
|
private static final Set<Material> MINECARTS = Set.of(
|
||||||
Material.MINECART,
|
Material.MINECART,
|
||||||
@ -178,7 +176,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
private final EventDispatcher eventDispatcher;
|
private final EventDispatcher eventDispatcher;
|
||||||
private final WorldEdit worldEdit;
|
private final WorldEdit worldEdit;
|
||||||
private final PlotAreaManager plotAreaManager;
|
private final PlotAreaManager plotAreaManager;
|
||||||
private final PlotListener plotListener;
|
|
||||||
// To prevent recursion
|
// To prevent recursion
|
||||||
private boolean tmpTeleport = true;
|
private boolean tmpTeleport = true;
|
||||||
private Field fieldPlayer;
|
private Field fieldPlayer;
|
||||||
@ -198,36 +195,12 @@ public class PlayerEventListener implements Listener {
|
|||||||
public PlayerEventListener(
|
public PlayerEventListener(
|
||||||
final @NonNull PlotAreaManager plotAreaManager,
|
final @NonNull PlotAreaManager plotAreaManager,
|
||||||
final @NonNull EventDispatcher eventDispatcher,
|
final @NonNull EventDispatcher eventDispatcher,
|
||||||
final @NonNull WorldEdit worldEdit,
|
final @NonNull WorldEdit worldEdit
|
||||||
final @NonNull PlotListener plotListener
|
|
||||||
) {
|
) {
|
||||||
|
super(eventDispatcher);
|
||||||
this.eventDispatcher = eventDispatcher;
|
this.eventDispatcher = eventDispatcher;
|
||||||
this.worldEdit = worldEdit;
|
this.worldEdit = worldEdit;
|
||||||
this.plotAreaManager = plotAreaManager;
|
this.plotAreaManager = plotAreaManager;
|
||||||
this.plotListener = plotListener;
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
|
||||||
public void onEffect(@NonNull EntityPotionEffectEvent event) {
|
|
||||||
if (Settings.Enabled_Components.DISABLE_BEACON_EFFECT_OVERFLOW ||
|
|
||||||
event.getCause() != EntityPotionEffectEvent.Cause.BEACON ||
|
|
||||||
!(event.getEntity() instanceof Player player)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
UUID uuid = player.getUniqueId();
|
|
||||||
PotionEffect effect = event.getNewEffect();
|
|
||||||
if (effect == null) {
|
|
||||||
PotionEffect oldEffect = event.getOldEffect();
|
|
||||||
if (oldEffect != null) {
|
|
||||||
String name = oldEffect.getType().getName();
|
|
||||||
plotListener.addEffect(uuid, name, -1);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
long expiresAt = System.currentTimeMillis() + effect.getDuration() * 50L; //Convert ticks to milliseconds
|
|
||||||
String name = effect.getType().getName();
|
|
||||||
plotListener.addEffect(uuid, name, expiresAt);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -273,16 +246,14 @@ public class PlayerEventListener implements Listener {
|
|||||||
Plot plot = plotPlayer.getCurrentPlot();
|
Plot plot = plotPlayer.getCurrentPlot();
|
||||||
// Check WorldEdit
|
// Check WorldEdit
|
||||||
switch (parts[0]) {
|
switch (parts[0]) {
|
||||||
case "up", "worldedit:up" -> {
|
case "up":
|
||||||
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !plotPlayer.hasPermission(
|
case "worldedit:up":
|
||||||
Permission.PERMISSION_ADMIN_BUILD_OTHER,
|
if (plot == null || (!plot.isAdded(plotPlayer.getUUID()) && !Permissions
|
||||||
true
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER, true))) {
|
||||||
))) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (plot == null && !area.isRoadFlags()) {
|
if (plot == null && !area.isRoadFlags()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -293,7 +264,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (blockedCommands.isEmpty()) {
|
if (blockedCommands.isEmpty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
|
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_INTERACT_BLOCKED_CMDS)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// When using namespaced commands, we're not interested in the namespace
|
// When using namespaced commands, we're not interested in the namespace
|
||||||
@ -312,7 +283,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
} else {
|
} else {
|
||||||
perm = "plots.admin.command.blocked-cmds.road";
|
perm = "plots.admin.command.blocked-cmds.road";
|
||||||
}
|
}
|
||||||
if (!plotPlayer.hasPermission(perm)) {
|
if (!Permissions.hasPermission(plotPlayer, perm)) {
|
||||||
plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked"));
|
plotPlayer.sendMessage(TranslatableCaption.of("blockedcmds.command_blocked"));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -369,7 +340,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
public void onConnect(PlayerJoinEvent event) {
|
public void onConnect(PlayerJoinEvent event) {
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
PlotSquared.platform().playerManager().removePlayer(player.getUniqueId());
|
PlotSquared.platform().playerManager().removePlayer(player.getUniqueId());
|
||||||
@ -383,7 +353,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (area != null) {
|
if (area != null) {
|
||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plotListener.plotEntry(pp, plot);
|
plotEntry(pp, plot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Delayed
|
// Delayed
|
||||||
@ -439,7 +409,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
if (lastPlot != null) {
|
if (lastPlot != null) {
|
||||||
plotListener.plotExit(pp, lastPlot);
|
plotExit(pp, lastPlot);
|
||||||
lastPlotAccess.remove();
|
lastPlotAccess.remove();
|
||||||
}
|
}
|
||||||
try (final MetaDataAccess<Location> lastLocationAccess =
|
try (final MetaDataAccess<Location> lastLocationAccess =
|
||||||
@ -573,8 +543,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (now == null) {
|
if (now == null) {
|
||||||
try (final MetaDataAccess<Boolean> kickAccess =
|
try (final MetaDataAccess<Boolean> kickAccess =
|
||||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
|
||||||
false)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -595,7 +564,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else if (now.equals(lastPlot)) {
|
} else if (now.equals(lastPlot)) {
|
||||||
ForceFieldListener.handleForcefield(player, pp, now);
|
ForceFieldListener.handleForcefield(player, pp, now);
|
||||||
} else if (!plotListener.plotEntry(pp, now) && this.tmpTeleport) {
|
} else if (!plotEntry(pp, now) && this.tmpTeleport) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("deny.no_enter"),
|
TranslatableCaption.of("deny.no_enter"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(now.toString())))
|
TagResolver.resolver("plot", Tag.inserting(Component.text(now.toString())))
|
||||||
@ -611,7 +580,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
int border = area.getBorder();
|
int border = area.getBorder();
|
||||||
int x1;
|
int x1;
|
||||||
if (x2 > border && this.tmpTeleport) {
|
if (x2 > border && this.tmpTeleport) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
to.setX(border - 1);
|
to.setX(border - 1);
|
||||||
this.tmpTeleport = false;
|
this.tmpTeleport = false;
|
||||||
player.teleport(event.getTo());
|
player.teleport(event.getTo());
|
||||||
@ -621,7 +590,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
||||||
}
|
}
|
||||||
} else if (x2 < -border && this.tmpTeleport) {
|
} else if (x2 < -border && this.tmpTeleport) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
to.setX(-border + 1);
|
to.setX(-border + 1);
|
||||||
this.tmpTeleport = false;
|
this.tmpTeleport = false;
|
||||||
player.teleport(event.getTo());
|
player.teleport(event.getTo());
|
||||||
@ -631,7 +600,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
||||||
}
|
}
|
||||||
} else if (((x1 = MathMan.roundInt(from.getX())) >= border && x2 <= border) || (x1 <= -border && x2 >= -border)) {
|
} else if (((x1 = MathMan.roundInt(from.getX())) >= border && x2 <= border) || (x1 <= -border && x2 >= -border)) {
|
||||||
if (pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.entered"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.entered"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -667,8 +636,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
try (final MetaDataAccess<Boolean> kickAccess =
|
try (final MetaDataAccess<Boolean> kickAccess =
|
||||||
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
pp.accessTemporaryMetaData(PlayerMetaDataKeys.TEMPORARY_KICK)) {
|
||||||
if (lastPlot != null && !plotListener.plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(
|
if (lastPlot != null && !plotExit(pp, lastPlot) && this.tmpTeleport && !kickAccess.get().orElse(false)) {
|
||||||
false)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -689,7 +657,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else if (plot.equals(lastPlot)) {
|
} else if (plot.equals(lastPlot)) {
|
||||||
ForceFieldListener.handleForcefield(player, pp, plot);
|
ForceFieldListener.handleForcefield(player, pp, plot);
|
||||||
} else if (!plotListener.plotEntry(pp, plot) && this.tmpTeleport) {
|
} else if (!plotEntry(pp, plot) && this.tmpTeleport) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("deny.no_enter"),
|
TranslatableCaption.of("deny.no_enter"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
|
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.toString())))
|
||||||
@ -706,7 +674,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
int border = area.getBorder();
|
int border = area.getBorder();
|
||||||
int z1;
|
int z1;
|
||||||
if (z2 > border && this.tmpTeleport) {
|
if (z2 > border && this.tmpTeleport) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
to.setZ(border - 1);
|
to.setZ(border - 1);
|
||||||
this.tmpTeleport = false;
|
this.tmpTeleport = false;
|
||||||
player.teleport(event.getTo());
|
player.teleport(event.getTo());
|
||||||
@ -716,7 +684,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
||||||
}
|
}
|
||||||
} else if (z2 < -border && this.tmpTeleport) {
|
} else if (z2 < -border && this.tmpTeleport) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
to.setZ(-border + 1);
|
to.setZ(-border + 1);
|
||||||
this.tmpTeleport = false;
|
this.tmpTeleport = false;
|
||||||
player.teleport(event.getTo());
|
player.teleport(event.getTo());
|
||||||
@ -726,7 +694,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.exited"));
|
||||||
}
|
}
|
||||||
} else if (((z1 = MathMan.roundInt(from.getZ())) >= border && z2 <= border) || (z1 <= -border && z2 >= -border)) {
|
} else if (((z1 = MathMan.roundInt(from.getZ())) >= border && z2 <= border) || (z1 <= -border && z2 >= -border)) {
|
||||||
if (pp.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
pp.sendMessage(TranslatableCaption.of("border.bypass.entered"));
|
pp.sendMessage(TranslatableCaption.of("border.bypass.entered"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -734,7 +702,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
public void onChat(AsyncPlayerChatEvent event) {
|
public void onChat(AsyncPlayerChatEvent event) {
|
||||||
if (event.isCancelled()) {
|
if (event.isCancelled()) {
|
||||||
return;
|
return;
|
||||||
@ -754,7 +721,8 @@ public class PlayerEventListener implements Listener {
|
|||||||
|| area.isForcingPlotChat())) {
|
|| area.isForcingPlotChat())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plot.isDenied(plotPlayer.getUUID()) && !plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_CHAT_BYPASS)) {
|
if (plot.isDenied(plotPlayer.getUUID()) && !Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_CHAT_BYPASS)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -824,10 +792,10 @@ public class PlayerEventListener implements Listener {
|
|||||||
lastLocationAccess.remove();
|
lastLocationAccess.remove();
|
||||||
}
|
}
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plotListener.plotExit(pp, plot);
|
plotExit(pp, plot);
|
||||||
}
|
}
|
||||||
if (this.worldEdit != null) {
|
if (this.worldEdit != null) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_WORLDEDIT_BYPASS)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_WORLDEDIT_BYPASS)) {
|
||||||
if (pp.getAttribute("worldedit")) {
|
if (pp.getAttribute("worldedit")) {
|
||||||
pp.removeAttribute("worldedit");
|
pp.removeAttribute("worldedit");
|
||||||
}
|
}
|
||||||
@ -838,7 +806,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (location.isPlotArea()) {
|
if (location.isPlotArea()) {
|
||||||
plot = location.getPlot();
|
plot = location.getPlot();
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
plotListener.plotEntry(pp, plot);
|
plotEntry(pp, plot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -883,7 +851,8 @@ public class PlayerEventListener implements Listener {
|
|||||||
final Plot plot = pp.getCurrentPlot();
|
final Plot plot = pp.getCurrentPlot();
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if (plot.getFlag(PreventCreativeCopyFlag.class) && !plot
|
if (plot.getFlag(PreventCreativeCopyFlag.class) && !plot
|
||||||
.isAdded(player.getUniqueId()) && !pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
.isAdded(player.getUniqueId()) && !Permissions
|
||||||
|
.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||||
final ItemStack newStack =
|
final ItemStack newStack =
|
||||||
new ItemStack(newItem.getType(), newItem.getAmount());
|
new ItemStack(newItem.getType(), newItem.getAmount());
|
||||||
event.setCursor(newStack);
|
event.setCursor(newStack);
|
||||||
@ -892,7 +861,8 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
PlotArea area = pp.getPlotAreaAbs();
|
PlotArea area = pp.getPlotAreaAbs();
|
||||||
if (area != null && PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, PreventCreativeCopyFlag.class, true)) {
|
if (area != null && area.isRoadFlags() && area
|
||||||
|
.getRoadFlag(PreventCreativeCopyFlag.class)) {
|
||||||
final ItemStack newStack =
|
final ItemStack newStack =
|
||||||
new ItemStack(newItem.getType(), newItem.getAmount());
|
new ItemStack(newItem.getType(), newItem.getAmount());
|
||||||
event.setCursor(newStack);
|
event.setCursor(newStack);
|
||||||
@ -945,7 +915,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
Plot plot = area.getPlotAbs(location);
|
Plot plot = area.getPlotAbs(location);
|
||||||
boolean cancelled = false;
|
boolean cancelled = false;
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -956,7 +926,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
cancelled = true;
|
cancelled = true;
|
||||||
}
|
}
|
||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -969,7 +939,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
} else {
|
} else {
|
||||||
UUID uuid = pp.getUUID();
|
UUID uuid = pp.getUUID();
|
||||||
if (!plot.isAdded(uuid)) {
|
if (!plot.isAdded(uuid)) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1009,9 +979,8 @@ public class PlayerEventListener implements Listener {
|
|||||||
Plot plot = location.getPlotAbs();
|
Plot plot = location.getPlotAbs();
|
||||||
BukkitPlayer pp = BukkitUtil.adapt(e.getPlayer());
|
BukkitPlayer pp = BukkitUtil.adapt(e.getPlayer());
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, MiscInteractFlag.class, true) && !pp.hasPermission(
|
if (!area.isRoadFlags() && !area.getRoadFlag(MiscInteractFlag.class) && !Permissions
|
||||||
Permission.PERMISSION_ADMIN_INTERACT_ROAD
|
.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
||||||
)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1023,14 +992,16 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
pp.sendMessage(TranslatableCaption.of("done.building_restricted"));
|
pp.sendMessage(
|
||||||
|
TranslatableCaption.of("done.building_restricted")
|
||||||
|
);
|
||||||
e.setCancelled(true);
|
e.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!plot.hasOwner()) {
|
if (!plot.hasOwner()) {
|
||||||
if (!pp.hasPermission("plots.admin.interact.unowned")) {
|
if (!Permissions.hasPermission(pp, "plots.admin.interact.unowned")) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1048,7 +1019,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (plot.getFlag(MiscInteractFlag.class)) {
|
if (plot.getFlag(MiscInteractFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1065,7 +1036,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
public void onCancelledInteract(PlayerInteractEvent event) {
|
public void onCancelledInteract(PlayerInteractEvent event) {
|
||||||
if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) {
|
if (event.isCancelled() && event.getAction() == Action.RIGHT_CLICK_AIR) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@ -1119,13 +1089,13 @@ public class PlayerEventListener implements Listener {
|
|||||||
Location location = BukkitUtil.adapt(block.getLocation());
|
Location location = BukkitUtil.adapt(block.getLocation());
|
||||||
Action action = event.getAction();
|
Action action = event.getAction();
|
||||||
switch (action) {
|
switch (action) {
|
||||||
case PHYSICAL -> {
|
case PHYSICAL: {
|
||||||
eventType = PlayerBlockEventType.TRIGGER_PHYSICAL;
|
eventType = PlayerBlockEventType.TRIGGER_PHYSICAL;
|
||||||
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo rearrange the right click code. it is all over the place.
|
//todo rearrange the right click code. it is all over the place.
|
||||||
case RIGHT_CLICK_BLOCK -> {
|
case RIGHT_CLICK_BLOCK: {
|
||||||
Material blockType = block.getType();
|
Material blockType = block.getType();
|
||||||
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
||||||
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
||||||
@ -1147,17 +1117,22 @@ public class PlayerEventListener implements Listener {
|
|||||||
|
|
||||||
// in the following, lb needs to have the material of the item in hand i.e. type
|
// in the following, lb needs to have the material of the item in hand i.e. type
|
||||||
switch (type.toString()) {
|
switch (type.toString()) {
|
||||||
case "REDSTONE", "STRING", "PUMPKIN_SEEDS", "MELON_SEEDS", "COCOA_BEANS", "WHEAT_SEEDS", "BEETROOT_SEEDS",
|
case "REDSTONE":
|
||||||
"SWEET_BERRIES", "GLOW_BERRIES" -> {
|
case "STRING":
|
||||||
|
case "PUMPKIN_SEEDS":
|
||||||
|
case "MELON_SEEDS":
|
||||||
|
case "COCOA_BEANS":
|
||||||
|
case "WHEAT_SEEDS":
|
||||||
|
case "BEETROOT_SEEDS":
|
||||||
|
case "SWEET_BERRIES":
|
||||||
|
case "GLOW_BERRIES":
|
||||||
return;
|
return;
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
//eventType = PlayerBlockEventType.PLACE_BLOCK;
|
//eventType = PlayerBlockEventType.PLACE_BLOCK;
|
||||||
if (type.isBlock()) {
|
if (type.isBlock()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (PaperLib.isPaper()) {
|
if (PaperLib.isPaper()) {
|
||||||
if (MaterialTags.SPAWN_EGGS.isTagged(type) || Material.EGG.equals(type)) {
|
if (MaterialTags.SPAWN_EGGS.isTagged(type) || Material.EGG.equals(type)) {
|
||||||
eventType = PlayerBlockEventType.SPAWN_MOB;
|
eventType = PlayerBlockEventType.SPAWN_MOB;
|
||||||
@ -1170,7 +1145,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (type.isEdible()) {
|
if (type.isEdible()) {
|
||||||
//Allow all players to eat while also allowing the block place event to be fired
|
//Allow all players to eat while also allowing the block place event ot be fired
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (type == Material.ARMOR_STAND) {
|
if (type == Material.ARMOR_STAND) {
|
||||||
@ -1189,8 +1164,9 @@ public class PlayerEventListener implements Listener {
|
|||||||
eventType = PlayerBlockEventType.READ;
|
eventType = PlayerBlockEventType.READ;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case LEFT_CLICK_BLOCK -> {
|
case LEFT_CLICK_BLOCK: {
|
||||||
Material blockType = block.getType();
|
Material blockType = block.getType();
|
||||||
|
|
||||||
// todo: when the code above is rearranged, it would be great to beautify this as well.
|
// todo: when the code above is rearranged, it would be great to beautify this as well.
|
||||||
@ -1201,11 +1177,11 @@ public class PlayerEventListener implements Listener {
|
|||||||
|
|
||||||
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
eventType = PlayerBlockEventType.INTERACT_BLOCK;
|
||||||
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
blocktype1 = BukkitAdapter.asBlockType(block.getType());
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
default -> {
|
default:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
if (this.worldEdit != null && pp.getAttribute("worldedit")) {
|
if (this.worldEdit != null && pp.getAttribute("worldedit")) {
|
||||||
if (event.getMaterial() == Material.getMaterial(this.worldEdit.getConfiguration().wandItem)) {
|
if (event.getMaterial() == Material.getMaterial(this.worldEdit.getConfiguration().wandItem)) {
|
||||||
return;
|
return;
|
||||||
@ -1271,7 +1247,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
|
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
|
||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
@ -1280,7 +1256,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
if (pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
@ -1292,7 +1268,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
if (pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
@ -1304,7 +1280,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("done.building_restricted")
|
TranslatableCaption.of("done.building_restricted")
|
||||||
);
|
);
|
||||||
@ -1327,7 +1303,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
TaskManager.removeFromTeleportQueue(event.getPlayer().getName());
|
TaskManager.removeFromTeleportQueue(event.getPlayer().getName());
|
||||||
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
|
BukkitPlayer pp = BukkitUtil.adapt(event.getPlayer());
|
||||||
pp.unregister();
|
pp.unregister();
|
||||||
plotListener.logout(pp.getUUID());
|
this.logout(pp.getUUID());
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
@ -1342,7 +1318,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
BukkitPlayer plotPlayer = BukkitUtil.adapt(player);
|
||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
@ -1351,7 +1327,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
@ -1363,7 +1339,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (!plot.isAdded(plotPlayer.getUUID())) {
|
} else if (!plot.isAdded(plotPlayer.getUUID())) {
|
||||||
if (plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
@ -1375,7 +1351,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
);
|
);
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
} else if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("done.building_restricted")
|
TranslatableCaption.of("done.building_restricted")
|
||||||
);
|
);
|
||||||
@ -1400,7 +1376,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
BukkitPlayer pp = BukkitUtil.adapt(p);
|
BukkitPlayer pp = BukkitUtil.adapt(p);
|
||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1412,7 +1388,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!plot.hasOwner()) {
|
if (!plot.hasOwner()) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1426,7 +1402,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
if (!plot.isAdded(pp.getUUID())) {
|
if (!plot.isAdded(pp.getUUID())) {
|
||||||
if (!plot.getFlag(HangingPlaceFlag.class)) {
|
if (!plot.getFlag(HangingPlaceFlag.class)) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1458,7 +1434,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
BukkitPlayer pp = BukkitUtil.adapt(p);
|
BukkitPlayer pp = BukkitUtil.adapt(p);
|
||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1469,7 +1445,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1483,7 +1459,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (plot.getFlag(HangingBreakFlag.class)) {
|
if (plot.getFlag(HangingBreakFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1507,7 +1483,8 @@ public class PlayerEventListener implements Listener {
|
|||||||
Plot plot = area.getPlot(BukkitUtil.adapt(event.getEntity().getLocation()));
|
Plot plot = area.getPlot(BukkitUtil.adapt(event.getEntity().getLocation()));
|
||||||
if (plot != null) {
|
if (plot != null) {
|
||||||
if (!plot.hasOwner()) {
|
if (!plot.hasOwner()) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_DESTROY_UNOWNED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1519,7 +1496,8 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else if (!plot.isAdded(player.getUUID())) {
|
} else if (!plot.isAdded(player.getUUID())) {
|
||||||
if (!plot.getFlag(HangingBreakFlag.class)) {
|
if (!plot.getFlag(HangingBreakFlag.class)) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_DESTROY_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1554,7 +1532,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
BukkitPlayer pp = BukkitUtil.adapt(p);
|
BukkitPlayer pp = BukkitUtil.adapt(p);
|
||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot == null && !area.isRoadFlags()) {
|
if (plot == null && !area.isRoadFlags()) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_ROAD)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1565,7 +1543,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (plot != null && !plot.hasOwner()) {
|
} else if (plot != null && !plot.hasOwner()) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1626,7 +1604,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_INTERACT_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1651,9 +1629,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
BukkitPlayer pp = BukkitUtil.adapt(p);
|
BukkitPlayer pp = BukkitUtil.adapt(p);
|
||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, VehicleBreakFlag.class, true) && !pp.hasPermission(
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD)) {
|
||||||
Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_ROAD
|
|
||||||
)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1665,7 +1641,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!plot.hasOwner()) {
|
if (!plot.hasOwner()) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1682,7 +1658,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (plot.getFlag(VehicleBreakFlag.class)) {
|
if (plot.getFlag(VehicleBreakFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_DESTROY_VEHICLE_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -1710,7 +1686,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ItemDropFlag.class, false)) {
|
if (area.isRoadFlags() && !area.getRoadFlag(ItemDropFlag.class)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -1736,7 +1712,7 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DropProtectionFlag.class, true)) {
|
if (area.isRoadFlags() && area.getRoadFlag(DropProtectionFlag.class)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
@ -1758,17 +1734,19 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, KeepInventoryFlag.class, true)) {
|
if (area.isRoadFlags() && area.getRoadFlag(KeepInventoryFlag.class)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (plot.getFlag(KeepInventoryFlag.class)) {
|
||||||
if (plot.getFlag(KeepInventoryFlag.class)) {
|
if (plot.getFlag(KeepInventoryFlag.class)) {
|
||||||
plot.debug(event.getEntity().getName() + " kept their inventory because of keep-inventory = true");
|
plot.debug(event.getEntity().getName() + " kept their inventory because of keep-inventory = true");
|
||||||
event.getDrops().clear();
|
event.getDrops().clear();
|
||||||
event.setKeepInventory(true);
|
event.setKeepInventory(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // #getLocate is needed for Spigot compatibility
|
@SuppressWarnings("deprecation") // #getLocate is needed for Spigot compatibility
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -1791,16 +1769,18 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DenyPortalTravelFlag.class, true)) {
|
if (area.isRoadFlags() && area.getRoadFlag(DenyPortalTravelFlag.class)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (plot.getFlag(DenyPortalTravelFlag.class)) {
|
||||||
if (plot.getFlag(DenyPortalTravelFlag.class)) {
|
if (plot.getFlag(DenyPortalTravelFlag.class)) {
|
||||||
plot.debug(event.getPlayer().getName() + " did not travel thru a portal because of deny-portal-travel = true");
|
plot.debug(event.getPlayer().getName() + " did not travel thru a portal because of deny-portal-travel = true");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onPortalCreation(PortalCreateEvent event) {
|
public void onPortalCreation(PortalCreateEvent event) {
|
||||||
@ -1808,7 +1788,6 @@ public class PlayerEventListener implements Listener {
|
|||||||
if (PlotSquared.get().getPlotAreaManager().getPlotAreasSet(world).size() == 0) {
|
if (PlotSquared.get().getPlotAreaManager().getPlotAreasSet(world).size() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayer pp = (event.getEntity() instanceof Player player) ? BukkitUtil.adapt(player) : null;
|
|
||||||
int minX = Integer.MAX_VALUE;
|
int minX = Integer.MAX_VALUE;
|
||||||
int maxX = Integer.MIN_VALUE;
|
int maxX = Integer.MIN_VALUE;
|
||||||
int minZ = Integer.MAX_VALUE;
|
int minZ = Integer.MAX_VALUE;
|
||||||
@ -1820,23 +1799,19 @@ public class PlayerEventListener implements Listener {
|
|||||||
maxZ = Math.max(state.getZ(), maxZ);
|
maxZ = Math.max(state.getZ(), maxZ);
|
||||||
}
|
}
|
||||||
int y = event.getBlocks().get(0).getY(); // Don't need to worry about this too much
|
int y = event.getBlocks().get(0).getY(); // Don't need to worry about this too much
|
||||||
for (Location location : List.of( // We don't care about duplicate locations
|
for (Location location : Set.of( // Use Set to lazily avoid duplicate locations
|
||||||
Location.at(world, minX, y, minZ),
|
Location.at(world, minX, y, maxX),
|
||||||
|
Location.at(world, minZ, y, maxZ),
|
||||||
Location.at(world, minX, y, maxZ),
|
Location.at(world, minX, y, maxZ),
|
||||||
Location.at(world, maxX, y, minZ),
|
Location.at(world, minZ, y, maxX)
|
||||||
Location.at(world, maxX, y, maxZ)
|
|
||||||
)) {
|
)) {
|
||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (area.notifyIfOutsideBuildArea(pp, location.getY())) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, DenyPortalsFlag.class, true)) {
|
if (area.isRoadFlags() && area.getRoadFlag(DenyPortalsFlag.class)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -1865,15 +1840,17 @@ public class PlayerEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, LecternReadBookFlag.class, true)) {
|
if (area.isRoadFlags() && area.getRoadFlag(LecternReadBookFlag.class)) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (plot.getFlag(LecternReadBookFlag.class)) {
|
||||||
if (plot.getFlag(LecternReadBookFlag.class)) {
|
if (plot.getFlag(LecternReadBookFlag.class)) {
|
||||||
plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true");
|
plot.debug(event.getPlayer().getName() + " could not take the book because of lectern-read-book = true");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,8 @@ import com.plotsquared.core.plot.PlotArea;
|
|||||||
import com.plotsquared.core.plot.PlotHandler;
|
import com.plotsquared.core.plot.PlotHandler;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
import com.plotsquared.core.plot.flag.implementations.ProjectilesFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.PlotFlagUtil;
|
import com.plotsquared.core.util.Permissions;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
@ -90,7 +91,7 @@ public class ProjectileEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
@EventHandler
|
||||||
public void onProjectileLaunch(ProjectileLaunchEvent event) {
|
public void onProjectileLaunch(ProjectileLaunchEvent event) {
|
||||||
Projectile entity = event.getEntity();
|
Projectile entity = event.getEntity();
|
||||||
ProjectileSource shooter = entity.getShooter();
|
ProjectileSource shooter = entity.getShooter();
|
||||||
@ -98,17 +99,14 @@ public class ProjectileEventListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
Location location = BukkitUtil.adapt(entity.getLocation());
|
||||||
PlotArea area = location.getPlotArea();
|
if (!this.plotAreaManager.hasPlotArea(location.getWorldName())) {
|
||||||
if (area == null) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter);
|
PlotPlayer<Player> pp = BukkitUtil.adapt((Player) shooter);
|
||||||
Plot plot = location.getOwnedPlot();
|
Plot plot = location.getOwnedPlot();
|
||||||
|
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !pp.hasPermission(
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_ROAD)) {
|
||||||
Permission.PERMISSION_ADMIN_PROJECTILE_ROAD
|
|
||||||
)) {
|
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -120,7 +118,7 @@ public class ProjectileEventListener implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
} else if (!plot.hasOwner()) {
|
} else if (!plot.hasOwner()) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -133,7 +131,7 @@ public class ProjectileEventListener implements Listener {
|
|||||||
}
|
}
|
||||||
} else if (!plot.isAdded(pp.getUUID())) {
|
} else if (!plot.isAdded(pp.getUUID())) {
|
||||||
if (!plot.getFlag(ProjectilesFlag.class)) {
|
if (!plot.getFlag(ProjectilesFlag.class)) {
|
||||||
if (!pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER)) {
|
||||||
pp.sendMessage(
|
pp.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -162,32 +160,16 @@ public class ProjectileEventListener implements Listener {
|
|||||||
Plot plot = area.getPlot(location);
|
Plot plot = area.getPlot(location);
|
||||||
ProjectileSource shooter = entity.getShooter();
|
ProjectileSource shooter = entity.getShooter();
|
||||||
if (shooter instanceof Player) {
|
if (shooter instanceof Player) {
|
||||||
if (!((Player) shooter).isOnline()) {
|
|
||||||
if (plot != null) {
|
|
||||||
if (plot.isAdded(((Player) shooter).getUniqueId()) || plot.getFlag(ProjectilesFlag.class)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
} else if (PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
entity.remove();
|
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
|
PlotPlayer<?> pp = BukkitUtil.adapt((Player) shooter);
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
if (!PlotFlagUtil.isAreaRoadFlagsAndFlagEquals(area, ProjectilesFlag.class, true) && !pp.hasPermission(
|
if (!Permissions.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED)) {
|
||||||
Permission.PERMISSION_ADMIN_PROJECTILE_UNOWNED
|
|
||||||
)) {
|
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (plot.isAdded(pp.getUUID()) || pp.hasPermission(Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag(
|
if (plot.isAdded(pp.getUUID()) || Permissions
|
||||||
ProjectilesFlag.class)) {
|
.hasPermission(pp, Permission.PERMISSION_ADMIN_PROJECTILE_OTHER) || plot.getFlag(ProjectilesFlag.class)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
entity.remove();
|
entity.remove();
|
||||||
@ -211,6 +193,7 @@ public class ProjectileEventListener implements Listener {
|
|||||||
if (sPlot == null || !PlotHandler.sameOwners(plot, sPlot)) {
|
if (sPlot == null || !PlotHandler.sameOwners(plot, sPlot)) {
|
||||||
entity.remove();
|
entity.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -31,39 +31,45 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.world.ChunkEvent;
|
import org.bukkit.event.world.ChunkEvent;
|
||||||
import org.bukkit.event.world.ChunkLoadEvent;
|
import org.bukkit.event.world.ChunkLoadEvent;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
|
import static com.plotsquared.core.util.ReflectionUtils.getRefClass;
|
||||||
|
|
||||||
public class SingleWorldListener implements Listener {
|
public class SingleWorldListener implements Listener {
|
||||||
|
|
||||||
private final Method methodSetUnsaved;
|
private final Method methodGetHandleChunk;
|
||||||
private Method methodGetHandleChunk;
|
private Field shouldSave = null;
|
||||||
private Object objChunkStatusFull = null;
|
|
||||||
|
|
||||||
public SingleWorldListener() throws Exception {
|
public SingleWorldListener() throws Exception {
|
||||||
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
ReflectionUtils.RefClass classCraftChunk = getRefClass("{cb}.CraftChunk");
|
||||||
ReflectionUtils.RefClass classChunkAccess = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
|
|
||||||
this.methodSetUnsaved = classChunkAccess.getMethod("a", boolean.class).getRealMethod();
|
|
||||||
try {
|
|
||||||
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod();
|
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle").getRealMethod();
|
||||||
} catch (NoSuchMethodException ignored) {
|
|
||||||
try {
|
try {
|
||||||
ReflectionUtils.RefClass classChunkStatus = getRefClass("net.minecraft.world.level.chunk.ChunkStatus");
|
if (PlotSquared.platform().serverVersion()[1] < 17) {
|
||||||
this.objChunkStatusFull = classChunkStatus.getRealClass().getField("n").get(null);
|
ReflectionUtils.RefClass classChunk = getRefClass("{nms}.Chunk");
|
||||||
this.methodGetHandleChunk = classCraftChunk.getMethod("getHandle", classChunkStatus.getRealClass()).getRealMethod();
|
if (PlotSquared.platform().serverVersion()[1] == 13) {
|
||||||
} catch (NoSuchMethodException ex) {
|
this.shouldSave = classChunk.getField("mustSave").getRealField();
|
||||||
throw new RuntimeException(ex);
|
} else {
|
||||||
|
this.shouldSave = classChunk.getField("s").getRealField();
|
||||||
}
|
}
|
||||||
|
} else if (PlotSquared.platform().serverVersion()[1] == 17) {
|
||||||
|
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.Chunk");
|
||||||
|
this.shouldSave = classChunk.getField("r").getRealField();
|
||||||
|
} else if (PlotSquared.platform().serverVersion()[1] == 18) {
|
||||||
|
ReflectionUtils.RefClass classChunk = getRefClass("net.minecraft.world.level.chunk.IChunkAccess");
|
||||||
|
this.shouldSave = classChunk.getField("b").getRealField();
|
||||||
|
}
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void markChunkAsClean(Chunk chunk) {
|
public void markChunkAsClean(Chunk chunk) {
|
||||||
try {
|
try {
|
||||||
Object nmsChunk = objChunkStatusFull != null
|
Object nmsChunk = methodGetHandleChunk.invoke(chunk);
|
||||||
? this.methodGetHandleChunk.invoke(chunk, objChunkStatusFull)
|
if (shouldSave != null) {
|
||||||
: this.methodGetHandleChunk.invoke(chunk);
|
this.shouldSave.set(nmsChunk, false);
|
||||||
methodSetUnsaved.invoke(nmsChunk, false);
|
}
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
@ -79,12 +85,7 @@ public class SingleWorldListener implements Listener {
|
|||||||
if (!SinglePlotArea.isSinglePlotWorld(name)) {
|
if (!SinglePlotArea.isSinglePlotWorld(name)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int x = event.getChunk().getX();
|
|
||||||
int z = event.getChunk().getZ();
|
|
||||||
if (x < 16 && x > -16 && z < 16 && z > -16) {
|
|
||||||
// Allow spawn to generate
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
markChunkAsClean(event.getChunk());
|
markChunkAsClean(event.getChunk());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
/*
|
|
||||||
* PlotSquared, a land and world management plugin for Minecraft.
|
|
||||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
|
||||||
* Copyright (C) IntellectualSites team and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.plotsquared.bukkit.listener;
|
|
||||||
|
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
|
||||||
import com.plotsquared.core.location.Location;
|
|
||||||
import com.plotsquared.core.plot.Plot;
|
|
||||||
import com.plotsquared.core.plot.flag.FlagContainer;
|
|
||||||
import com.plotsquared.core.plot.flag.implementations.BeaconEffectsFlag;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.entity.EntityPotionEffectEvent;
|
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Fallback listener for paper events on spigot
|
|
||||||
*/
|
|
||||||
public class SpigotListener implements Listener {
|
|
||||||
|
|
||||||
@EventHandler(ignoreCancelled = true)
|
|
||||||
public void onEffect(@NonNull EntityPotionEffectEvent event) {
|
|
||||||
if (event.getCause() != EntityPotionEffectEvent.Cause.BEACON) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
Location location = BukkitUtil.adapt(entity.getLocation());
|
|
||||||
Plot plot = location.getPlot();
|
|
||||||
if (plot == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FlagContainer container = plot.getFlagContainer();
|
|
||||||
BeaconEffectsFlag effectsEnabled = container.getFlag(BeaconEffectsFlag.class);
|
|
||||||
if (effectsEnabled != null && !effectsEnabled.getValue()) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,63 @@
|
|||||||
|
/*
|
||||||
|
* PlotSquared, a land and world management plugin for Minecraft.
|
||||||
|
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
||||||
|
* Copyright (C) IntellectualSites team and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package com.plotsquared.bukkit.managers;
|
||||||
|
|
||||||
|
/*
|
||||||
|
import com.google.inject.Singleton;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
|
import se.hyperver.hyperverse.Hyperverse;
|
||||||
|
import se.hyperver.hyperverse.world.WorldConfiguration;
|
||||||
|
import se.hyperver.hyperverse.world.WorldConfigurationBuilder;
|
||||||
|
import se.hyperver.hyperverse.world.WorldFeatures;
|
||||||
|
import se.hyperver.hyperverse.world.WorldType;
|
||||||
|
|
||||||
|
Hyperverse implementation is currently put on ice until Hyperverse is released on a stable line and deployed to the central
|
||||||
|
repository.
|
||||||
|
|
||||||
|
@Singleton
|
||||||
|
public class HyperverseWorldManager extends BukkitWorldManager {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable World handleWorldCreation(@NonNull String worldName, @Nullable String generator) {
|
||||||
|
// First let Bukkit register the world
|
||||||
|
this.setGenerator(worldName, generator);
|
||||||
|
// Create the world
|
||||||
|
final WorldConfigurationBuilder worldConfigurationBuilder = WorldConfiguration.builder()
|
||||||
|
.setName(worldName).setType(WorldType.OVER_WORLD);
|
||||||
|
if (generator != null) {
|
||||||
|
worldConfigurationBuilder.setGenerator(generator).setWorldFeatures(WorldFeatures.FLATLAND);
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
return Hyperverse.getApi().createWorld(worldConfigurationBuilder.createWorldConfiguration())
|
||||||
|
.getBukkitWorld();
|
||||||
|
} catch (final Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getName() {
|
||||||
|
return "bukkit-hyperverse";
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
*/
|
@ -30,9 +30,8 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
*
|
*
|
||||||
* @deprecated Deprecated and scheduled for removal without replacement
|
* @deprecated Deprecated and scheduled for removal without replacement
|
||||||
* in favor of the build in setup wizard.
|
* in favor of the build in setup wizard.
|
||||||
* However, this class will be kept around for a while, given it's not a maintenance burden.
|
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated(forRemoval = true, since = "6.0.0")
|
||||||
@Singleton
|
@Singleton
|
||||||
public class MultiverseWorldManager extends BukkitWorldManager {
|
public class MultiverseWorldManager extends BukkitWorldManager {
|
||||||
|
|
||||||
|
@ -52,7 +52,7 @@ public class MVdWPlaceholders {
|
|||||||
|
|
||||||
@Subscribe
|
@Subscribe
|
||||||
public void onNewPlaceholder(final PlaceholderRegistry.@NonNull PlaceholderAddedEvent event) {
|
public void onNewPlaceholder(final PlaceholderRegistry.@NonNull PlaceholderAddedEvent event) {
|
||||||
this.addPlaceholder(event.placeholder());
|
this.addPlaceholder(event.getPlaceholder());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addPlaceholder(final @NonNull Placeholder placeholder) {
|
private void addPlaceholder(final @NonNull Placeholder placeholder) {
|
||||||
|
@ -87,9 +87,4 @@ public class BukkitOfflinePlayer implements OfflinePlotPlayer {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean hasPermission(@NonNull final String permission, final boolean notify) {
|
|
||||||
return hasPermission(permission);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -47,13 +47,13 @@ import org.bukkit.event.EventException;
|
|||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.bukkit.permissions.PermissionAttachmentInfo;
|
import org.bukkit.permissions.PermissionAttachmentInfo;
|
||||||
import org.bukkit.plugin.RegisteredListener;
|
import org.bukkit.plugin.RegisteredListener;
|
||||||
import org.bukkit.potion.PotionEffectType;
|
|
||||||
import org.checkerframework.checker.index.qual.NonNegative;
|
import org.checkerframework.checker.index.qual.NonNegative;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.sk89q.worldedit.world.gamemode.GameModes.ADVENTURE;
|
import static com.sk89q.worldedit.world.gamemode.GameModes.ADVENTURE;
|
||||||
import static com.sk89q.worldedit.world.gamemode.GameModes.CREATIVE;
|
import static com.sk89q.worldedit.world.gamemode.GameModes.CREATIVE;
|
||||||
@ -67,15 +67,24 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
private String name;
|
private String name;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* <p>Please do not use this method. Instead use
|
||||||
|
* BukkitUtil.getPlayer(Player), as it caches player objects.</p>
|
||||||
|
*
|
||||||
* @param plotAreaManager PlotAreaManager instance
|
* @param plotAreaManager PlotAreaManager instance
|
||||||
* @param eventDispatcher EventDispatcher instance
|
* @param eventDispatcher EventDispatcher instance
|
||||||
* @param player Bukkit player instance
|
* @param player Bukkit player instance
|
||||||
* @param permissionHandler PermissionHandler instance
|
* @param permissionHandler PermissionHandler instance
|
||||||
*/
|
*/
|
||||||
BukkitPlayer(
|
public BukkitPlayer(
|
||||||
final @NonNull PlotAreaManager plotAreaManager,
|
final @NonNull PlotAreaManager plotAreaManager, final @NonNull EventDispatcher eventDispatcher,
|
||||||
final @NonNull EventDispatcher eventDispatcher,
|
final @NonNull Player player, final @NonNull PermissionHandler permissionHandler
|
||||||
final @NonNull Player player,
|
) {
|
||||||
|
this(plotAreaManager, eventDispatcher, player, false, permissionHandler);
|
||||||
|
}
|
||||||
|
|
||||||
|
public BukkitPlayer(
|
||||||
|
final @NonNull PlotAreaManager plotAreaManager, final @NonNull
|
||||||
|
EventDispatcher eventDispatcher, final @NonNull Player player,
|
||||||
final boolean realPlayer,
|
final boolean realPlayer,
|
||||||
final @NonNull PermissionHandler permissionHandler
|
final @NonNull PermissionHandler permissionHandler
|
||||||
) {
|
) {
|
||||||
@ -176,10 +185,6 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
final Set<PermissionAttachmentInfo> effective = player.getEffectivePermissions();
|
final Set<PermissionAttachmentInfo> effective = player.getEffectivePermissions();
|
||||||
if (!effective.isEmpty()) {
|
if (!effective.isEmpty()) {
|
||||||
for (PermissionAttachmentInfo attach : effective) {
|
for (PermissionAttachmentInfo attach : effective) {
|
||||||
// Ignore all "false" permissions
|
|
||||||
if (!attach.getValue()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
String permStr = attach.getPermission();
|
String permStr = attach.getPermission();
|
||||||
if (permStr.startsWith(stubPlus)) {
|
if (permStr.startsWith(stubPlus)) {
|
||||||
hasAny = true;
|
hasAny = true;
|
||||||
@ -343,14 +348,6 @@ public class BukkitPlayer extends PlotPlayer<Player> {
|
|||||||
return BukkitUtil.BUKKIT_AUDIENCES.player(this.player);
|
return BukkitUtil.BUKKIT_AUDIENCES.player(this.player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeEffect(@NonNull String name) {
|
|
||||||
PotionEffectType type = PotionEffectType.getByName(name);
|
|
||||||
if (type != null) {
|
|
||||||
player.removePotionEffect(type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canSee(final PlotPlayer<?> other) {
|
public boolean canSee(final PlotPlayer<?> other) {
|
||||||
if (other instanceof ConsolePlayer) {
|
if (other instanceof ConsolePlayer) {
|
||||||
|
@ -70,7 +70,7 @@ public class BukkitPlayerManager extends PlayerManager<BukkitPlayer, Player> {
|
|||||||
if (player == null || !player.isOnline()) {
|
if (player == null || !player.isOnline()) {
|
||||||
throw new NoSuchPlayerException(uuid);
|
throw new NoSuchPlayerException(uuid);
|
||||||
}
|
}
|
||||||
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, player, false, this.permissionHandler);
|
return new BukkitPlayer(this.plotAreaManager, this.eventDispatcher, player, this.permissionHandler);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
|
@ -239,11 +239,9 @@ public final class BukkitChunkCoordinator extends ChunkCoordinator {
|
|||||||
* server's main thread.
|
* server's main thread.
|
||||||
*/
|
*/
|
||||||
private void processChunk(final @NonNull Chunk chunk) {
|
private void processChunk(final @NonNull Chunk chunk) {
|
||||||
/* Chunk#isLoaded does not necessarily return true shortly after PaperLib#getChunkAtAsync completes, but the chunk is
|
|
||||||
still loaded.
|
|
||||||
if (!chunk.isLoaded()) {
|
if (!chunk.isLoaded()) {
|
||||||
throw new IllegalArgumentException(String.format("Chunk %d;%d is is not loaded", chunk.getX(), chunk.getZ());
|
throw new IllegalArgumentException(String.format("Chunk %d;%d is is not loaded", chunk.getX(), chunk.getZ()));
|
||||||
}*/
|
}
|
||||||
if (finished) {
|
if (finished) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -19,12 +19,12 @@
|
|||||||
package com.plotsquared.bukkit.queue;
|
package com.plotsquared.bukkit.queue;
|
||||||
|
|
||||||
import com.google.common.base.Preconditions;
|
import com.google.common.base.Preconditions;
|
||||||
import com.intellectualsites.annotations.DoNotUse;
|
|
||||||
import com.plotsquared.bukkit.util.BukkitBlockUtil;
|
import com.plotsquared.bukkit.util.BukkitBlockUtil;
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
import com.plotsquared.core.location.ChunkWrapper;
|
import com.plotsquared.core.location.ChunkWrapper;
|
||||||
import com.plotsquared.core.location.Location;
|
import com.plotsquared.core.location.Location;
|
||||||
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
import com.plotsquared.core.queue.ZeroedDelegateScopedQueueCoordinator;
|
||||||
|
import com.plotsquared.core.util.AnnotationHelper;
|
||||||
import com.plotsquared.core.util.ChunkUtil;
|
import com.plotsquared.core.util.ChunkUtil;
|
||||||
import com.plotsquared.core.util.PatternUtil;
|
import com.plotsquared.core.util.PatternUtil;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
@ -44,10 +44,7 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
/**
|
@AnnotationHelper.ApiDescription(info = "Internal use only. Subject to changes at any time.")
|
||||||
* Internal use only. Subject to changes at any time.
|
|
||||||
*/
|
|
||||||
@DoNotUse
|
|
||||||
public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
||||||
|
|
||||||
public final Biome[] biomes;
|
public final Biome[] biomes;
|
||||||
@ -62,6 +59,7 @@ public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
|||||||
/**
|
/**
|
||||||
* @param minY minimum world Y, inclusive
|
* @param minY minimum world Y, inclusive
|
||||||
* @param maxY maximum world Y, inclusive
|
* @param maxY maximum world Y, inclusive
|
||||||
|
*
|
||||||
* @since 6.6.0
|
* @since 6.6.0
|
||||||
*/
|
*/
|
||||||
public GenChunk(int minY, int maxY) {
|
public GenChunk(int minY, int maxY) {
|
||||||
@ -109,9 +107,9 @@ public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
|||||||
*/
|
*/
|
||||||
public void setChunk(@NonNull ChunkWrapper wrap) {
|
public void setChunk(@NonNull ChunkWrapper wrap) {
|
||||||
chunk = null;
|
chunk = null;
|
||||||
world = wrap.world();
|
world = wrap.world;
|
||||||
chunkX = wrap.x();
|
chunkX = wrap.x;
|
||||||
chunkZ = wrap.z();
|
chunkZ = wrap.z;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -185,11 +183,7 @@ public class GenChunk extends ZeroedDelegateScopedQueueCoordinator {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean setBlock(int x, int y, int z, @NonNull Pattern pattern) {
|
public boolean setBlock(int x, int y, int z, @NonNull Pattern pattern) {
|
||||||
final BaseBlock block = PatternUtil.apply(Preconditions.checkNotNull(
|
return setBlock(x, y, z, PatternUtil.apply(Preconditions.checkNotNull(pattern, "Pattern may not be null"), x, y, z));
|
||||||
pattern,
|
|
||||||
"Pattern may not be null"
|
|
||||||
), x + (chunkX << 4), y, z + (chunkZ << 4));
|
|
||||||
return setBlock(x, y, z, block);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -44,7 +44,6 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator {
|
|||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + LimitedRegionWrapperQueue.class.getSimpleName());
|
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + LimitedRegionWrapperQueue.class.getSimpleName());
|
||||||
|
|
||||||
private final LimitedRegion limitedRegion;
|
private final LimitedRegion limitedRegion;
|
||||||
private boolean useOtherRestoreTagMethod = false;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since 6.9.0
|
* @since 6.9.0
|
||||||
@ -66,18 +65,10 @@ public class LimitedRegionWrapperQueue extends DelegateQueueCoordinator {
|
|||||||
CompoundTag tag = id.getNbtData();
|
CompoundTag tag = id.getNbtData();
|
||||||
StateWrapper sw = new StateWrapper(tag);
|
StateWrapper sw = new StateWrapper(tag);
|
||||||
try {
|
try {
|
||||||
if (useOtherRestoreTagMethod && getWorld() != null) {
|
|
||||||
sw.restoreTag(getWorld().getName(), x, y, z);
|
|
||||||
} else {
|
|
||||||
sw.restoreTag(limitedRegion.getBlockState(x, y, z).getBlock());
|
sw.restoreTag(limitedRegion.getBlockState(x, y, z).getBlock());
|
||||||
}
|
|
||||||
} catch (IllegalArgumentException e) {
|
} catch (IllegalArgumentException e) {
|
||||||
LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e);
|
LOGGER.error("Error attempting to populate tile entity into the world at location {},{},{}", x, y, z, e);
|
||||||
return false;
|
return false;
|
||||||
} catch (IllegalStateException e) {
|
|
||||||
useOtherRestoreTagMethod = true;
|
|
||||||
LOGGER.warn("IllegalStateException attempting to populate tile entity into the world at location {},{},{}. " +
|
|
||||||
"Possibly on <=1.17.1, switching to secondary method.", x, y, z, e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
|
@ -18,8 +18,6 @@
|
|||||||
*/
|
*/
|
||||||
package com.plotsquared.bukkit.schematic;
|
package com.plotsquared.bukkit.schematic;
|
||||||
|
|
||||||
import com.destroystokyo.paper.profile.PlayerProfile;
|
|
||||||
import com.destroystokyo.paper.profile.ProfileProperty;
|
|
||||||
import com.plotsquared.bukkit.util.BukkitUtil;
|
import com.plotsquared.bukkit.util.BukkitUtil;
|
||||||
import com.sk89q.jnbt.ByteTag;
|
import com.sk89q.jnbt.ByteTag;
|
||||||
import com.sk89q.jnbt.CompoundTag;
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
@ -30,22 +28,16 @@ import com.sk89q.jnbt.Tag;
|
|||||||
import com.sk89q.worldedit.blocks.BaseItemStack;
|
import com.sk89q.worldedit.blocks.BaseItemStack;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import com.sk89q.worldedit.world.item.ItemType;
|
import com.sk89q.worldedit.world.item.ItemType;
|
||||||
import io.papermc.lib.PaperLib;
|
|
||||||
import org.apache.logging.log4j.LogManager;
|
|
||||||
import org.apache.logging.log4j.Logger;
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.DyeColor;
|
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Banner;
|
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.Container;
|
import org.bukkit.block.Container;
|
||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.block.Skull;
|
import org.bukkit.block.Skull;
|
||||||
import org.bukkit.block.banner.Pattern;
|
|
||||||
import org.bukkit.block.banner.PatternType;
|
|
||||||
import org.bukkit.enchantments.Enchantment;
|
import org.bukkit.enchantments.Enchantment;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@ -54,15 +46,20 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class StateWrapper {
|
public class StateWrapper {
|
||||||
|
|
||||||
public CompoundTag tag;
|
public org.bukkit.block.BlockState state = null;
|
||||||
|
public CompoundTag tag = null;
|
||||||
|
|
||||||
private boolean paperErrorTextureSent = false;
|
/**
|
||||||
private static final Logger LOGGER = LogManager.getLogger("PlotSquared/" + StateWrapper.class.getSimpleName());
|
* @deprecated in favour of using WE methods for obtaining NBT, specifically by obtaining a
|
||||||
|
* {@link com.sk89q.worldedit.world.block.BaseBlock} and then using {@link com.sk89q.worldedit.world.block.BaseBlock#getNbtData()}
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.9.0")
|
||||||
|
public StateWrapper(org.bukkit.block.BlockState state) {
|
||||||
|
this.state = state;
|
||||||
|
}
|
||||||
|
|
||||||
public StateWrapper(CompoundTag tag) {
|
public StateWrapper(CompoundTag tag) {
|
||||||
this.tag = tag;
|
this.tag = tag;
|
||||||
@ -240,8 +237,9 @@ public class StateWrapper {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
String player = skullOwner.getString("Name");
|
String player = skullOwner.getString("Name");
|
||||||
|
if (player == null || player.isEmpty()) {
|
||||||
if (player != null && !player.isEmpty()) {
|
return false;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
skull.setOwningPlayer(Bukkit.getOfflinePlayer(player));
|
skull.setOwningPlayer(Bukkit.getOfflinePlayer(player));
|
||||||
skull.update(true);
|
skull.update(true);
|
||||||
@ -250,61 +248,31 @@ public class StateWrapper {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
final CompoundTag properties = (CompoundTag) skullOwner.getValue().get("Properties");
|
/**
|
||||||
if (properties == null) {
|
* Get a CompoundTag of the contents of a block's inventory (chest, furnace, etc.).
|
||||||
return false;
|
*
|
||||||
|
* @deprecated in favour of using WorldEdit methods for obtaining NBT, specifically by obtaining a
|
||||||
|
* {@link com.sk89q.worldedit.world.block.BaseBlock} and then using {@link com.sk89q.worldedit.world.block.BaseBlock#getNbtData()}
|
||||||
|
*/
|
||||||
|
@Deprecated(forRemoval = true, since = "6.9.0")
|
||||||
|
public CompoundTag getTag() {
|
||||||
|
if (this.tag != null) {
|
||||||
|
return this.tag;
|
||||||
}
|
}
|
||||||
final ListTag textures = properties.getListTag("textures");
|
if (this.state instanceof InventoryHolder inv) {
|
||||||
if (textures.getValue().isEmpty()) {
|
ItemStack[] contents = inv.getInventory().getContents();
|
||||||
return false;
|
Map<String, Tag> values = new HashMap<>();
|
||||||
|
values.put("Items", new ListTag(CompoundTag.class, serializeInventory(contents)));
|
||||||
|
return new CompoundTag(values);
|
||||||
}
|
}
|
||||||
final CompoundTag textureCompound = (CompoundTag) textures.getValue().get(0);
|
|
||||||
if (textureCompound == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
String textureValue = textureCompound.getString("Value");
|
|
||||||
if (textureValue == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!PaperLib.isPaper()) {
|
|
||||||
if (!paperErrorTextureSent) {
|
|
||||||
paperErrorTextureSent = true;
|
|
||||||
LOGGER.error("Failed to populate skull data in your road schematic - This is a Spigot limitation.");
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
final PlayerProfile profile = Bukkit.createProfile(UUID.randomUUID());
|
|
||||||
profile.setProperty(new ProfileProperty("textures", textureValue));
|
|
||||||
skull.setPlayerProfile(profile);
|
|
||||||
skull.update(true);
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
case "banner" -> {
|
|
||||||
if (state instanceof Banner banner) {
|
|
||||||
List<Tag> patterns = this.tag.getListTag("Patterns").getValue();
|
|
||||||
if (patterns == null || patterns.isEmpty()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
banner.setPatterns(patterns.stream().map(t -> (CompoundTag) t).map(compoundTag -> {
|
|
||||||
DyeColor color = DyeColor.getByWoolData((byte) compoundTag.getInt("Color"));
|
|
||||||
PatternType patternType = PatternType.getByIdentifier(compoundTag.getString("Pattern"));
|
|
||||||
if (color == null || patternType == null) {
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return new Pattern(color, patternType);
|
|
||||||
}).filter(Objects::nonNull).toList());
|
|
||||||
banner.update(true);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
String tileid = this.tag.getString("id").toLowerCase();
|
String tileid = this.tag.getString("id").toLowerCase();
|
||||||
|
@ -40,6 +40,7 @@ import com.plotsquared.core.plot.flag.implementations.PvpFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.TamedAttackFlag;
|
import com.plotsquared.core.plot.flag.implementations.TamedAttackFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.VehicleCapFlag;
|
import com.plotsquared.core.plot.flag.implementations.VehicleCapFlag;
|
||||||
import com.plotsquared.core.util.EntityUtil;
|
import com.plotsquared.core.util.EntityUtil;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.entity.EntityCategories;
|
import com.plotsquared.core.util.entity.EntityCategories;
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -169,7 +170,8 @@ public class BukkitEntityUtil {
|
|||||||
if (plot != null && (plot.getFlag(HangingBreakFlag.class) || plot
|
if (plot != null && (plot.getFlag(HangingBreakFlag.class) || plot
|
||||||
.isAdded(plotPlayer.getUUID()))) {
|
.isAdded(plotPlayer.getUUID()))) {
|
||||||
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
if (Settings.Done.RESTRICT_BUILDING && DoneFlag.isDone(plot)) {
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
if (!Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_BUILD_OTHER)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("done.building_restricted")
|
TranslatableCaption.of("done.building_restricted")
|
||||||
);
|
);
|
||||||
@ -178,7 +180,7 @@ public class BukkitEntityUtil {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -193,7 +195,7 @@ public class BukkitEntityUtil {
|
|||||||
.isAdded(plotPlayer.getUUID()))) {
|
.isAdded(plotPlayer.getUUID()))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_DESTROY + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -217,7 +219,7 @@ public class BukkitEntityUtil {
|
|||||||
.getFlag(PveFlag.class))) {
|
.getFlag(PveFlag.class))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -241,7 +243,7 @@ public class BukkitEntityUtil {
|
|||||||
.getFlag(PveFlag.class))) {
|
.getFlag(PveFlag.class))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -257,7 +259,8 @@ public class BukkitEntityUtil {
|
|||||||
}
|
}
|
||||||
} else if (EntityCategories.PLAYER.contains(entityType)) {
|
} else if (EntityCategories.PLAYER.contains(entityType)) {
|
||||||
if (isPlot) {
|
if (isPlot) {
|
||||||
if (!plot.getFlag(PvpFlag.class) && !plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
if (!plot.getFlag(PvpFlag.class) && !Permissions
|
||||||
|
.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -274,7 +277,7 @@ public class BukkitEntityUtil {
|
|||||||
} else if (roadFlags && area.getRoadFlag(PvpFlag.class)) {
|
} else if (roadFlags && area.getRoadFlag(PvpFlag.class)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVP + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -294,7 +297,7 @@ public class BukkitEntityUtil {
|
|||||||
.getFlag(PveFlag.class))) {
|
.getFlag(PveFlag.class))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -319,7 +322,7 @@ public class BukkitEntityUtil {
|
|||||||
} else if (roadFlags && area.getRoadFlag(PveFlag.class)) {
|
} else if (roadFlags && area.getRoadFlag(PveFlag.class)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!plotPlayer.hasPermission(Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
if (!Permissions.hasPermission(plotPlayer, Permission.PERMISSION_ADMIN_PVE + "." + stub)) {
|
||||||
plotPlayer.sendMessage(
|
plotPlayer.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission_event"),
|
TranslatableCaption.of("permission.no_permission_event"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
|
@ -44,7 +44,6 @@ import java.util.stream.IntStream;
|
|||||||
@Singleton
|
@Singleton
|
||||||
public class BukkitInventoryUtil extends InventoryUtil {
|
public class BukkitInventoryUtil extends InventoryUtil {
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
private static @Nullable ItemStack getItem(PlotItemStack item) {
|
private static @Nullable ItemStack getItem(PlotItemStack item) {
|
||||||
if (item == null) {
|
if (item == null) {
|
||||||
return null;
|
return null;
|
||||||
|
@ -67,7 +67,6 @@ public class BukkitSetupUtils extends SetupUtils {
|
|||||||
this.worldFile = worldFile;
|
this.worldFile = worldFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("deprecation") // Paper deprecation
|
|
||||||
@Override
|
@Override
|
||||||
public void updateGenerators(final boolean force) {
|
public void updateGenerators(final boolean force) {
|
||||||
if (loaded && !SetupUtils.generators.isEmpty() && !force) {
|
if (loaded && !SetupUtils.generators.isEmpty() && !force) {
|
||||||
@ -125,7 +124,7 @@ public class BukkitSetupUtils extends SetupUtils {
|
|||||||
public String setupWorld(PlotAreaBuilder builder) {
|
public String setupWorld(PlotAreaBuilder builder) {
|
||||||
this.updateGenerators(false);
|
this.updateGenerators(false);
|
||||||
ConfigurationNode[] steps = builder.settingsNodesWrapper() == null ?
|
ConfigurationNode[] steps = builder.settingsNodesWrapper() == null ?
|
||||||
new ConfigurationNode[0] : builder.settingsNodesWrapper().settingsNodes();
|
new ConfigurationNode[0] : builder.settingsNodesWrapper().getSettingsNodes();
|
||||||
String world = builder.worldName();
|
String world = builder.worldName();
|
||||||
PlotAreaType type = builder.plotAreaType();
|
PlotAreaType type = builder.plotAreaType();
|
||||||
String worldPath = "worlds." + builder.worldName();
|
String worldPath = "worlds." + builder.worldName();
|
||||||
|
@ -58,7 +58,6 @@ import org.bukkit.block.BlockFace;
|
|||||||
import org.bukkit.block.Sign;
|
import org.bukkit.block.Sign;
|
||||||
import org.bukkit.block.data.Directional;
|
import org.bukkit.block.data.Directional;
|
||||||
import org.bukkit.block.data.type.WallSign;
|
import org.bukkit.block.data.type.WallSign;
|
||||||
import org.bukkit.entity.Allay;
|
|
||||||
import org.bukkit.entity.Ambient;
|
import org.bukkit.entity.Ambient;
|
||||||
import org.bukkit.entity.Animals;
|
import org.bukkit.entity.Animals;
|
||||||
import org.bukkit.entity.AreaEffectCloud;
|
import org.bukkit.entity.AreaEffectCloud;
|
||||||
@ -439,9 +438,6 @@ public class BukkitUtil extends WorldUtil {
|
|||||||
allowedInterfaces.add(Animals.class);
|
allowedInterfaces.add(Animals.class);
|
||||||
allowedInterfaces.add(WaterMob.class);
|
allowedInterfaces.add(WaterMob.class);
|
||||||
allowedInterfaces.add(Ambient.class);
|
allowedInterfaces.add(Ambient.class);
|
||||||
if (PlotSquared.platform().serverVersion()[1] >= 19) {
|
|
||||||
allowedInterfaces.add(Allay.class);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
case "tameable" -> allowedInterfaces.add(Tameable.class);
|
case "tameable" -> allowedInterfaces.add(Tameable.class);
|
||||||
case "vehicle" -> allowedInterfaces.add(Vehicle.class);
|
case "vehicle" -> allowedInterfaces.add(Vehicle.class);
|
||||||
|
@ -1,78 +0,0 @@
|
|||||||
/*
|
|
||||||
* PlotSquared, a land and world management plugin for Minecraft.
|
|
||||||
* Copyright (C) IntellectualSites <https://intellectualsites.com>
|
|
||||||
* Copyright (C) IntellectualSites team and contributors
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
package com.plotsquared.bukkit.util;
|
|
||||||
|
|
||||||
import com.intellectualsites.annotations.NotPublic;
|
|
||||||
import com.plotsquared.core.PlotSquared;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.stream.Stream;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a helper class which replaces older syntax no longer supported by MiniMessage with replacements in messages_%.json.
|
|
||||||
* MiniMessage changed the syntax between major releases. To warrant a smooth upgrade, we attempt to replace any occurrences
|
|
||||||
* while loading PlotSquared.
|
|
||||||
*
|
|
||||||
* @since 7.0.0
|
|
||||||
*/
|
|
||||||
@NotPublic
|
|
||||||
public class TranslationUpdateManager {
|
|
||||||
|
|
||||||
public static void upgradeTranslationFile() throws IOException {
|
|
||||||
String suggestCommand = "suggest_command";
|
|
||||||
String suggestCommandReplacement = "run_command";
|
|
||||||
String minHeight = "minHeight";
|
|
||||||
String minheightReplacement = "minheight";
|
|
||||||
String maxHeight = "maxHeight";
|
|
||||||
String maxheightReplacement = "maxheight";
|
|
||||||
String usedGrants = "usedGrants";
|
|
||||||
String usedGrantsReplacement = "used_grants";
|
|
||||||
String remainingGrants = "remainingGrants";
|
|
||||||
String rremainingGrantsReplacement = "remaining_grants";
|
|
||||||
|
|
||||||
try (Stream<Path> paths = Files.walk(Paths.get(PlotSquared.platform().getDirectory().toPath().resolve("lang").toUri()))) {
|
|
||||||
paths
|
|
||||||
.filter(Files::isRegularFile)
|
|
||||||
.filter(p -> p.getFileName().toString().matches("messages_[a-z]{2}\\.json"))
|
|
||||||
.forEach(p -> {
|
|
||||||
replaceInFile(p, suggestCommand, suggestCommandReplacement);
|
|
||||||
replaceInFile(p, minHeight, minheightReplacement);
|
|
||||||
replaceInFile(p, maxHeight, maxheightReplacement);
|
|
||||||
replaceInFile(p, usedGrants, usedGrantsReplacement);
|
|
||||||
replaceInFile(p, remainingGrants, rremainingGrantsReplacement);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void replaceInFile(Path path, String searchText, String replacementText) {
|
|
||||||
try {
|
|
||||||
String content = Files.readString(path);
|
|
||||||
if (content.contains(searchText)) {
|
|
||||||
content = content.replaceAll(searchText, replacementText);
|
|
||||||
Files.writeString(path, content);
|
|
||||||
}
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -35,7 +35,7 @@ import org.bukkit.scheduler.BukkitTask;
|
|||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.net.URI;
|
import java.net.URL;
|
||||||
|
|
||||||
public class UpdateUtility implements Listener {
|
public class UpdateUtility implements Listener {
|
||||||
|
|
||||||
@ -54,14 +54,12 @@ public class UpdateUtility implements Listener {
|
|||||||
internalVersion = PlotSquared.get().getVersion();
|
internalVersion = PlotSquared.get().getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({"deprecation", "DefaultCharset"})
|
@SuppressWarnings({"deprecation", "DefaultCharset"}) // Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
|
||||||
// Suppress Json deprecation, we can't use features from gson 2.8.1 and newer yet
|
|
||||||
public void updateChecker() {
|
public void updateChecker() {
|
||||||
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
|
task = Bukkit.getScheduler().runTaskTimerAsynchronously(this.javaPlugin, () -> {
|
||||||
try {
|
try {
|
||||||
HttpsURLConnection connection = (HttpsURLConnection) URI.create(
|
HttpsURLConnection connection = (HttpsURLConnection) new URL(
|
||||||
"https://api.spigotmc.org/simple/0.2/index.php?action=getResource&id=77506")
|
"https://api.spigotmc.org/simple/0.1/index.php?action=getResource&id=77506")
|
||||||
.toURL()
|
|
||||||
.openConnection();
|
.openConnection();
|
||||||
connection.setRequestMethod("GET");
|
connection.setRequestMethod("GET");
|
||||||
JsonObject result = new JsonParser()
|
JsonObject result = new JsonParser()
|
||||||
|
@ -36,7 +36,8 @@ import com.sk89q.worldedit.function.pattern.Pattern;
|
|||||||
import com.sk89q.worldedit.regions.CuboidRegion;
|
import com.sk89q.worldedit.regions.CuboidRegion;
|
||||||
import com.sk89q.worldedit.world.biome.BiomeType;
|
import com.sk89q.worldedit.world.biome.BiomeType;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -45,7 +46,10 @@ public class FaweRegionManager extends BukkitRegionManager {
|
|||||||
private final FaweDelegateRegionManager delegate = new FaweDelegateRegionManager();
|
private final FaweDelegateRegionManager delegate = new FaweDelegateRegionManager();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public FaweRegionManager(WorldUtil worldUtil, GlobalBlockQueue blockQueue, ProgressSubscriberFactory subscriberFactory) {
|
public FaweRegionManager(
|
||||||
|
@NonNull WorldUtil worldUtil, @NonNull GlobalBlockQueue blockQueue, @NonNull
|
||||||
|
ProgressSubscriberFactory subscriberFactory
|
||||||
|
) {
|
||||||
super(worldUtil, blockQueue, subscriberFactory);
|
super(worldUtil, blockQueue, subscriberFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -72,9 +76,9 @@ public class FaweRegionManager extends BukkitRegionManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean handleClear(
|
public boolean handleClear(
|
||||||
@NonNull Plot plot,
|
@NotNull Plot plot,
|
||||||
@Nullable Runnable whenDone,
|
@Nullable Runnable whenDone,
|
||||||
@NonNull PlotManager manager,
|
@NotNull PlotManager manager,
|
||||||
final @Nullable PlotPlayer<?> player
|
final @Nullable PlotPlayer<?> player
|
||||||
) {
|
) {
|
||||||
if (!Settings.FAWE_Components.CLEAR || !(manager instanceof HybridPlotManager)) {
|
if (!Settings.FAWE_Components.CLEAR || !(manager instanceof HybridPlotManager)) {
|
||||||
|
@ -29,7 +29,7 @@ import com.plotsquared.core.util.SchematicHandler;
|
|||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import com.sk89q.jnbt.CompoundTag;
|
import com.sk89q.jnbt.CompoundTag;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
@ -40,7 +40,7 @@ public class FaweSchematicHandler extends SchematicHandler {
|
|||||||
private final FaweDelegateSchematicHandler delegate = new FaweDelegateSchematicHandler();
|
private final FaweDelegateSchematicHandler delegate = new FaweDelegateSchematicHandler();
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
public FaweSchematicHandler(WorldUtil worldUtil, ProgressSubscriberFactory subscriberFactory) {
|
public FaweSchematicHandler(@NotNull WorldUtil worldUtil, @NotNull ProgressSubscriberFactory subscriberFactory) {
|
||||||
super(worldUtil, subscriberFactory);
|
super(worldUtil, subscriberFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,8 +75,9 @@ public class FaweSchematicHandler extends SchematicHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Schematic getSchematic(@NonNull InputStream is) {
|
public Schematic getSchematic(@NotNull InputStream is) {
|
||||||
return delegate.getSchematic(is);
|
return delegate.getSchematic(is);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,8 +111,8 @@ public class SQLiteUUIDService implements UUIDService, Consumer<List<UUIDMapping
|
|||||||
try (final PreparedStatement statement = getConnection()
|
try (final PreparedStatement statement = getConnection()
|
||||||
.prepareStatement("INSERT OR REPLACE INTO `usercache` (`uuid`, `username`) VALUES(?, ?)")) {
|
.prepareStatement("INSERT OR REPLACE INTO `usercache` (`uuid`, `username`) VALUES(?, ?)")) {
|
||||||
for (final UUIDMapping mapping : uuidWrappers) {
|
for (final UUIDMapping mapping : uuidWrappers) {
|
||||||
statement.setString(1, mapping.uuid().toString());
|
statement.setString(1, mapping.getUuid().toString());
|
||||||
statement.setString(2, mapping.username());
|
statement.setString(2, mapping.getUsername());
|
||||||
statement.executeUpdate();
|
statement.executeUpdate();
|
||||||
}
|
}
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
|
76
CODE_OF_CONDUCT.md
Normal file
76
CODE_OF_CONDUCT.md
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
# Contributor Covenant Code of Conduct
|
||||||
|
|
||||||
|
## Our Pledge
|
||||||
|
|
||||||
|
In the interest of fostering an open and welcoming environment, we as
|
||||||
|
contributors and maintainers pledge to making participation in our project and
|
||||||
|
our community a harassment-free experience for everyone, regardless of age, body
|
||||||
|
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||||
|
level of experience, education, socio-economic status, nationality, personal
|
||||||
|
appearance, race, religion, or sexual identity and orientation.
|
||||||
|
|
||||||
|
## Our Standards
|
||||||
|
|
||||||
|
Examples of behavior that contributes to creating a positive environment
|
||||||
|
include:
|
||||||
|
|
||||||
|
* Using welcoming and inclusive language
|
||||||
|
* Being respectful of differing viewpoints and experiences
|
||||||
|
* Gracefully accepting constructive criticism
|
||||||
|
* Focusing on what is best for the community
|
||||||
|
* Showing empathy towards other community members
|
||||||
|
|
||||||
|
Examples of unacceptable behavior by participants include:
|
||||||
|
|
||||||
|
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||||
|
advances
|
||||||
|
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||||
|
* Public or private harassment
|
||||||
|
* Publishing others' private information, such as a physical or electronic
|
||||||
|
address, without explicit permission
|
||||||
|
* Other conduct which could reasonably be considered inappropriate in a
|
||||||
|
professional setting
|
||||||
|
|
||||||
|
## Our Responsibilities
|
||||||
|
|
||||||
|
Project maintainers are responsible for clarifying the standards of acceptable
|
||||||
|
behavior and are expected to take appropriate and fair corrective action in
|
||||||
|
response to any instances of unacceptable behavior.
|
||||||
|
|
||||||
|
Project maintainers have the right and responsibility to remove, edit, or
|
||||||
|
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||||
|
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||||
|
permanently any contributor for other behaviors that they deem inappropriate,
|
||||||
|
threatening, offensive, or harmful.
|
||||||
|
|
||||||
|
## Scope
|
||||||
|
|
||||||
|
This Code of Conduct applies both within project spaces and in public spaces
|
||||||
|
when an individual is representing the project or its community. Examples of
|
||||||
|
representing a project or community include using an official project e-mail
|
||||||
|
address, posting via an official social media account, or acting as an appointed
|
||||||
|
representative at an online or offline event. Representation of a project may be
|
||||||
|
further defined and clarified by project maintainers.
|
||||||
|
|
||||||
|
## Enforcement
|
||||||
|
|
||||||
|
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||||
|
reported by contacting the project team at contact@intellectualsites.com. All
|
||||||
|
complaints will be reviewed and investigated and will result in a response that
|
||||||
|
is deemed necessary and appropriate to the circumstances. The project team is
|
||||||
|
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||||
|
Further details of specific enforcement policies may be posted separately.
|
||||||
|
|
||||||
|
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||||
|
faith may face temporary or permanent repercussions as determined by other
|
||||||
|
members of the project's leadership.
|
||||||
|
|
||||||
|
## Attribution
|
||||||
|
|
||||||
|
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||||
|
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||||
|
|
||||||
|
[homepage]: https://www.contributor-covenant.org
|
||||||
|
|
||||||
|
For answers to common questions about this code of conduct, see
|
||||||
|
https://www.contributor-covenant.org/faq
|
@ -2,18 +2,18 @@ import java.time.format.DateTimeFormatter
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
// Expected everywhere.
|
// Expected everywhere.
|
||||||
compileOnlyApi(libs.checkerqual)
|
compileOnlyApi("org.checkerframework:checker-qual")
|
||||||
|
|
||||||
// Minecraft expectations
|
// Minecraft expectations
|
||||||
compileOnlyApi(libs.gson)
|
compileOnlyApi("com.google.code.gson:gson")
|
||||||
compileOnly(libs.guava)
|
compileOnly("com.google.guava:guava")
|
||||||
|
|
||||||
// Platform expectations
|
// Platform expectations
|
||||||
compileOnlyApi(libs.snakeyaml)
|
compileOnlyApi("org.yaml:snakeyaml")
|
||||||
|
|
||||||
// Adventure
|
// Adventure
|
||||||
api(libs.adventureApi)
|
api("net.kyori:adventure-api")
|
||||||
api(libs.adventureMiniMessage)
|
api("net.kyori:adventure-text-minimessage")
|
||||||
|
|
||||||
// Guice
|
// Guice
|
||||||
api(libs.guice) {
|
api(libs.guice) {
|
||||||
@ -31,19 +31,18 @@ dependencies {
|
|||||||
exclude(group = "dummypermscompat")
|
exclude(group = "dummypermscompat")
|
||||||
}
|
}
|
||||||
testImplementation(libs.worldeditCore)
|
testImplementation(libs.worldeditCore)
|
||||||
compileOnly(libs.faweBukkit) { isTransitive = false }
|
compileOnly("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false }
|
||||||
testImplementation(libs.faweCore) { isTransitive = false }
|
testImplementation("com.fastasyncworldedit:FastAsyncWorldEdit-Core") { isTransitive = false }
|
||||||
|
|
||||||
// Logging
|
// Logging
|
||||||
compileOnlyApi(libs.log4j)
|
compileOnlyApi("org.apache.logging.log4j:log4j-api")
|
||||||
|
|
||||||
// Other libraries
|
// Other libraries
|
||||||
api(libs.prtree)
|
api(libs.prtree)
|
||||||
api(libs.aopalliance)
|
api(libs.aopalliance)
|
||||||
api(libs.cloudServices)
|
api(libs.cloudServices)
|
||||||
api(libs.arkitektonika)
|
api(libs.arkitektonika)
|
||||||
api(libs.paster)
|
api("com.intellectualsites.paster:Paster")
|
||||||
api(libs.informativeAnnotations)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.processResources {
|
tasks.processResources {
|
||||||
@ -54,30 +53,14 @@ tasks.processResources {
|
|||||||
"date" to rootProject.grgit.head().dateTime.format(DateTimeFormatter.ofPattern("yy.MM.dd"))
|
"date" to rootProject.grgit.head().dateTime.format(DateTimeFormatter.ofPattern("yy.MM.dd"))
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
doLast {
|
|
||||||
copy {
|
|
||||||
from(layout.buildDirectory.file("$rootDir/LICENSE"))
|
|
||||||
into(layout.buildDirectory.dir("resources/main"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks {
|
tasks {
|
||||||
withType<Javadoc> {
|
withType<Javadoc> {
|
||||||
val isRelease = if (rootProject.version.toString().endsWith("-SNAPSHOT")) "TODO" else rootProject.version.toString()
|
|
||||||
val opt = options as StandardJavadocDocletOptions
|
val opt = options as StandardJavadocDocletOptions
|
||||||
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/" + libs.worldeditCore.get().versionConstraint.toString())
|
opt.links("https://docs.enginehub.org/javadoc/com.sk89q.worldedit/worldedit-core/" + libs.worldeditCore.get().versionConstraint.toString())
|
||||||
opt.links("https://jd.advntr.dev/api/4.14.0/")
|
opt.links("https://jd.adventure.kyori.net/api/4.9.3/")
|
||||||
opt.links("https://jd.advntr.dev/text-minimessage/4.14.0/")
|
|
||||||
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
opt.links("https://google.github.io/guice/api-docs/" + libs.guice.get().versionConstraint.toString() + "/javadoc/")
|
||||||
opt.links("https://checkerframework.org/api/")
|
opt.links("https://checkerframework.org/api/")
|
||||||
opt.links("https://javadoc.io/doc/com.intellectualsites.informative-annotations/informative-annotations/latest/")
|
|
||||||
opt.isLinkSource = true
|
|
||||||
opt.bottom(File("$rootDir/javadocfooter.html").readText())
|
|
||||||
opt.isUse = true
|
|
||||||
opt.encoding("UTF-8")
|
|
||||||
opt.keyWords()
|
|
||||||
opt.addStringOption("-since", isRelease)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,6 @@ import cloud.commandframework.services.ServicePipeline;
|
|||||||
import com.google.inject.Injector;
|
import com.google.inject.Injector;
|
||||||
import com.google.inject.Key;
|
import com.google.inject.Key;
|
||||||
import com.google.inject.TypeLiteral;
|
import com.google.inject.TypeLiteral;
|
||||||
import com.intellectualsites.annotations.DoNotUse;
|
|
||||||
import com.plotsquared.core.backup.BackupManager;
|
import com.plotsquared.core.backup.BackupManager;
|
||||||
import com.plotsquared.core.configuration.caption.LocaleHolder;
|
import com.plotsquared.core.configuration.caption.LocaleHolder;
|
||||||
import com.plotsquared.core.generator.GeneratorWrapper;
|
import com.plotsquared.core.generator.GeneratorWrapper;
|
||||||
@ -32,9 +31,9 @@ import com.plotsquared.core.inject.annotations.DefaultGenerator;
|
|||||||
import com.plotsquared.core.location.World;
|
import com.plotsquared.core.location.World;
|
||||||
import com.plotsquared.core.permissions.PermissionHandler;
|
import com.plotsquared.core.permissions.PermissionHandler;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.expiration.ExpireManager;
|
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.queue.GlobalBlockQueue;
|
import com.plotsquared.core.queue.GlobalBlockQueue;
|
||||||
|
import com.plotsquared.core.util.AnnotationHelper;
|
||||||
import com.plotsquared.core.util.ChunkManager;
|
import com.plotsquared.core.util.ChunkManager;
|
||||||
import com.plotsquared.core.util.EconHandler;
|
import com.plotsquared.core.util.EconHandler;
|
||||||
import com.plotsquared.core.util.PlatformWorldManager;
|
import com.plotsquared.core.util.PlatformWorldManager;
|
||||||
@ -76,11 +75,6 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
|||||||
*/
|
*/
|
||||||
void shutdown();
|
void shutdown();
|
||||||
|
|
||||||
/**
|
|
||||||
* Completely shuts down the server.
|
|
||||||
*/
|
|
||||||
void shutdownServer();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the name of the plugin
|
* Get the name of the plugin
|
||||||
*
|
*
|
||||||
@ -285,16 +279,6 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
|||||||
return injector().getInstance(ChunkManager.class);
|
return injector().getInstance(ChunkManager.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Get the {@link ExpireManager} implementation for the platform
|
|
||||||
*
|
|
||||||
* @return Expire manager
|
|
||||||
* @since 6.10.2
|
|
||||||
*/
|
|
||||||
default @NonNull ExpireManager expireManager() {
|
|
||||||
return injector().getInstance(ExpireManager.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the {@link PlotAreaManager} implementation.
|
* Get the {@link PlotAreaManager} implementation.
|
||||||
*
|
*
|
||||||
@ -324,7 +308,7 @@ public interface PlotPlatform<P> extends LocaleHolder {
|
|||||||
* @return worldedit implementations
|
* @return worldedit implementations
|
||||||
* @since 6.3.0
|
* @since 6.3.0
|
||||||
*/
|
*/
|
||||||
@DoNotUse
|
@AnnotationHelper.ApiDescription(info = "Internal use only")
|
||||||
@NonNull String worldEditImplementations();
|
@NonNull String worldEditImplementations();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -84,7 +84,7 @@ import java.io.InputStream;
|
|||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.ObjectInputStream;
|
import java.io.ObjectInputStream;
|
||||||
import java.io.ObjectOutputStream;
|
import java.io.ObjectOutputStream;
|
||||||
import java.net.URI;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
@ -197,9 +197,6 @@ public class PlotSquared {
|
|||||||
this.loadCaptionMap();
|
this.loadCaptionMap();
|
||||||
} catch (final Exception e) {
|
} catch (final Exception e) {
|
||||||
LOGGER.error("Failed to load caption map", e);
|
LOGGER.error("Failed to load caption map", e);
|
||||||
LOGGER.error("Shutting down server to prevent further issues");
|
|
||||||
this.platform.shutdownServer();
|
|
||||||
throw new RuntimeException("Abort loading PlotSquared");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Setup the global flag container
|
// Setup the global flag container
|
||||||
@ -210,10 +207,9 @@ public class PlotSquared {
|
|||||||
try {
|
try {
|
||||||
URL logurl = PlotSquared.class.getProtectionDomain().getCodeSource().getLocation();
|
URL logurl = PlotSquared.class.getProtectionDomain().getCodeSource().getLocation();
|
||||||
this.jarFile = new File(
|
this.jarFile = new File(
|
||||||
URI.create(
|
new URL(logurl.toURI().toString().split("\\!")[0].replaceAll("jar:file", "file"))
|
||||||
logurl.toURI().toString().split("\\!")[0].replaceAll("jar:file", "file"))
|
.toURI().getPath());
|
||||||
.getPath());
|
} catch (MalformedURLException | URISyntaxException | SecurityException e) {
|
||||||
} catch (URISyntaxException | SecurityException e) {
|
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
this.jarFile = new File(this.platform.getDirectory().getParentFile(), "PlotSquared.jar");
|
this.jarFile = new File(this.platform.getDirectory().getParentFile(), "PlotSquared.jar");
|
||||||
if (!this.jarFile.exists()) {
|
if (!this.jarFile.exists()) {
|
||||||
@ -271,11 +267,7 @@ public class PlotSquared {
|
|||||||
captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang"));
|
captionMap = this.captionLoader.loadAll(this.platform.getDirectory().toPath().resolve("lang"));
|
||||||
} else {
|
} else {
|
||||||
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
|
String fileName = "messages_" + Settings.Enabled_Components.DEFAULT_LOCALE + ".json";
|
||||||
captionMap = this.captionLoader.loadOrCreateSingle(this.platform
|
captionMap = this.captionLoader.loadSingle(this.platform.getDirectory().toPath().resolve("lang").resolve(fileName));
|
||||||
.getDirectory()
|
|
||||||
.toPath()
|
|
||||||
.resolve("lang")
|
|
||||||
.resolve(fileName));
|
|
||||||
}
|
}
|
||||||
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
|
this.captionMaps.put(TranslatableCaption.DEFAULT_NAMESPACE, captionMap);
|
||||||
LOGGER.info(
|
LOGGER.info(
|
||||||
@ -295,11 +287,11 @@ public class PlotSquared {
|
|||||||
|
|
||||||
public void startExpiryTasks() {
|
public void startExpiryTasks() {
|
||||||
if (Settings.Enabled_Components.PLOT_EXPIRY) {
|
if (Settings.Enabled_Components.PLOT_EXPIRY) {
|
||||||
ExpireManager expireManager = PlotSquared.platform().expireManager();
|
ExpireManager.IMP = new ExpireManager(this.eventDispatcher);
|
||||||
expireManager.runAutomatedTask();
|
ExpireManager.IMP.runAutomatedTask();
|
||||||
for (Settings.Auto_Clear settings : Settings.AUTO_CLEAR.getInstances()) {
|
for (Settings.Auto_Clear settings : Settings.AUTO_CLEAR.getInstances()) {
|
||||||
ExpiryTask task = new ExpiryTask(settings, this.getPlotAreaManager());
|
ExpiryTask task = new ExpiryTask(settings, this.getPlotAreaManager());
|
||||||
expireManager.addTask(task);
|
ExpireManager.IMP.addTask(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -650,8 +642,7 @@ public class PlotSquared {
|
|||||||
} else {
|
} else {
|
||||||
list = new ArrayList<>(input);
|
list = new ArrayList<>(input);
|
||||||
}
|
}
|
||||||
ExpireManager expireManager = PlotSquared.platform().expireManager();
|
list.sort(Comparator.comparingLong(a -> ExpireManager.IMP.getTimestamp(a.getOwnerAbs())));
|
||||||
list.sort(Comparator.comparingLong(a -> expireManager.getTimestamp(a.getOwnerAbs())));
|
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1016,7 +1007,7 @@ public class PlotSquared {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Setup the configuration for a plot world based on world arguments.
|
* Setup the configuration for a plot world based on world arguments.
|
||||||
* <p>
|
*
|
||||||
*
|
*
|
||||||
* <i>e.g. /mv create <world> normal -g PlotSquared:<args></i>
|
* <i>e.g. /mv create <world> normal -g PlotSquared:<args></i>
|
||||||
*
|
*
|
||||||
|
@ -136,9 +136,13 @@ public class SimpleBackupManager implements BackupManager {
|
|||||||
return this.backupLimit;
|
return this.backupLimit;
|
||||||
}
|
}
|
||||||
|
|
||||||
private record PlotCacheKey(
|
private static final class PlotCacheKey {
|
||||||
Plot plot
|
|
||||||
) {
|
private final Plot plot;
|
||||||
|
|
||||||
|
private PlotCacheKey(Plot plot) {
|
||||||
|
this.plot = plot;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(final Object o) {
|
public boolean equals(final Object o) {
|
||||||
|
@ -26,6 +26,7 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlayerManager;
|
import com.plotsquared.core.util.PlayerManager;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
@ -59,20 +60,18 @@ public class Add extends Command {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CompletableFuture<Boolean> execute(
|
public CompletableFuture<Boolean> execute(
|
||||||
final PlotPlayer<?> player,
|
final PlotPlayer<?> player, String[] args,
|
||||||
String[] args,
|
|
||||||
RunnableVal3<Command, Runnable, Runnable> confirm,
|
RunnableVal3<Command, Runnable, Runnable> confirm,
|
||||||
RunnableVal2<Command, CommandResult> whenDone
|
RunnableVal2<Command, CommandResult> whenDone
|
||||||
) throws CommandException {
|
) throws CommandException {
|
||||||
final Plot plot = check(player.getCurrentPlot(), TranslatableCaption.of("errors.not_in_plot"));
|
final Plot plot = check(player.getCurrentPlot(), TranslatableCaption.of("errors.not_in_plot"));
|
||||||
checkTrue(plot.hasOwner(), TranslatableCaption.of("info.plot_unowned"));
|
checkTrue(plot.hasOwner(), TranslatableCaption.of("info.plot_unowned"));
|
||||||
checkTrue(
|
checkTrue(
|
||||||
plot.isOwner(player.getUUID()) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_TRUST),
|
plot.isOwner(player.getUUID()) || Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_TRUST),
|
||||||
TranslatableCaption.of("permission.no_plot_perms")
|
TranslatableCaption.of("permission.no_plot_perms")
|
||||||
);
|
);
|
||||||
checkTrue(
|
checkTrue(args.length == 1, TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
args.length == 1,
|
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text("/plot add <player | *>")))
|
TagResolver.resolver("value", Tag.inserting(Component.text("/plot add <player | *>")))
|
||||||
);
|
);
|
||||||
final CompletableFuture<Boolean> future = new CompletableFuture<>();
|
final CompletableFuture<Boolean> future = new CompletableFuture<>();
|
||||||
@ -97,8 +96,9 @@ public class Add extends Command {
|
|||||||
int size = plot.getTrusted().size() + plot.getMembers().size();
|
int size = plot.getTrusted().size() + plot.getMembers().size();
|
||||||
while (iterator.hasNext()) {
|
while (iterator.hasNext()) {
|
||||||
UUID uuid = iterator.next();
|
UUID uuid = iterator.next();
|
||||||
if (uuid == DBFunc.EVERYONE && !(player.hasPermission(Permission.PERMISSION_TRUST_EVERYONE) || player.hasPermission(
|
if (uuid == DBFunc.EVERYONE && !(
|
||||||
Permission.PERMISSION_ADMIN_COMMAND_TRUST))) {
|
Permissions.hasPermission(player, Permission.PERMISSION_TRUST_EVERYONE) || Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_TRUST))) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(
|
TagResolver.resolver("value", Tag.inserting(
|
||||||
@ -132,7 +132,7 @@ public class Add extends Command {
|
|||||||
}
|
}
|
||||||
checkTrue(!uuids.isEmpty(), null);
|
checkTrue(!uuids.isEmpty(), null);
|
||||||
int localAddSize = plot.getMembers().size();
|
int localAddSize = plot.getMembers().size();
|
||||||
int maxAddSize = player.hasPermissionRange(Permission.PERMISSION_ADD, Settings.Limit.MAX_PLOTS);
|
int maxAddSize = Permissions.hasPermissionRange(player, Permission.PERMISSION_ADD, Settings.Limit.MAX_PLOTS);
|
||||||
if (localAddSize >= maxAddSize) {
|
if (localAddSize >= maxAddSize) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("members.plot_max_members_added"),
|
TranslatableCaption.of("members.plot_max_members_added"),
|
||||||
|
@ -26,6 +26,7 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
@ -204,7 +205,7 @@ public class Alias extends SubCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isPermitted(PlotPlayer<?> player, Permission permission) {
|
private boolean isPermitted(PlotPlayer<?> player, Permission permission) {
|
||||||
return player.hasPermission(permission);
|
return Permissions.hasPermission(player, permission);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,7 @@ import com.plotsquared.core.queue.QueueCoordinator;
|
|||||||
import com.plotsquared.core.setup.PlotAreaBuilder;
|
import com.plotsquared.core.setup.PlotAreaBuilder;
|
||||||
import com.plotsquared.core.util.FileUtils;
|
import com.plotsquared.core.util.FileUtils;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.RegionUtil;
|
import com.plotsquared.core.util.RegionUtil;
|
||||||
import com.plotsquared.core.util.SchematicHandler;
|
import com.plotsquared.core.util.SchematicHandler;
|
||||||
import com.plotsquared.core.util.SetupUtils;
|
import com.plotsquared.core.util.SetupUtils;
|
||||||
@ -55,7 +56,6 @@ import com.plotsquared.core.util.TabCompletions;
|
|||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import com.sk89q.worldedit.EditSession;
|
import com.sk89q.worldedit.EditSession;
|
||||||
import com.sk89q.worldedit.EditSessionBuilder;
|
|
||||||
import com.sk89q.worldedit.LocalSession;
|
import com.sk89q.worldedit.LocalSession;
|
||||||
import com.sk89q.worldedit.WorldEdit;
|
import com.sk89q.worldedit.WorldEdit;
|
||||||
import com.sk89q.worldedit.entity.Player;
|
import com.sk89q.worldedit.entity.Player;
|
||||||
@ -139,7 +139,7 @@ public class Area extends SubCommand {
|
|||||||
player.sendMessage(RequiredType.CONSOLE.getErrorMessage());
|
player.sendMessage(RequiredType.CONSOLE.getErrorMessage());
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_CREATE)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -233,9 +233,10 @@ public class Area extends SubCommand {
|
|||||||
try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(
|
try (final ClipboardWriter clipboardWriter = BuiltInClipboardFormat.SPONGE_SCHEMATIC.getWriter(new FileOutputStream(
|
||||||
file))) {
|
file))) {
|
||||||
final BlockArrayClipboard clipboard = new BlockArrayClipboard(selectedRegion);
|
final BlockArrayClipboard clipboard = new BlockArrayClipboard(selectedRegion);
|
||||||
EditSessionBuilder editSessionBuilder = WorldEdit.getInstance().newEditSessionBuilder();
|
final EditSession editSession = WorldEdit
|
||||||
editSessionBuilder.world(selectedRegion.getWorld());
|
.getInstance()
|
||||||
final EditSession editSession = editSessionBuilder.build();
|
.getEditSessionFactory()
|
||||||
|
.getEditSession(selectedRegion.getWorld(), -1);
|
||||||
final ForwardExtentCopy forwardExtentCopy =
|
final ForwardExtentCopy forwardExtentCopy =
|
||||||
new ForwardExtentCopy(editSession, selectedRegion, clipboard, selectedRegion.getMinimumPoint());
|
new ForwardExtentCopy(editSession, selectedRegion, clipboard, selectedRegion.getMinimumPoint());
|
||||||
forwardExtentCopy.setCopyingBiomes(true);
|
forwardExtentCopy.setCopyingBiomes(true);
|
||||||
@ -291,7 +292,7 @@ public class Area extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "c", "setup", "create" -> {
|
case "c", "setup", "create" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_CREATE)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -617,7 +618,7 @@ public class Area extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "i", "info" -> {
|
case "i", "info" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_INFO)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_INFO)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -693,7 +694,7 @@ public class Area extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "l", "list" -> {
|
case "l", "list" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_LIST)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_LIST)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -771,7 +772,7 @@ public class Area extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "regen", "clear", "reset", "regenerate" -> {
|
case "regen", "clear", "reset", "regenerate" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_REGEN)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_REGEN)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -806,7 +807,7 @@ public class Area extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "goto", "v", "teleport", "visit", "tp" -> {
|
case "goto", "v", "teleport", "visit", "tp" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_AREA_TP)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_AREA_TP)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AREA_TP))
|
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AREA_TP))
|
||||||
@ -865,19 +866,19 @@ public class Area extends SubCommand {
|
|||||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_AREA_CREATE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
|
||||||
completions.add("create");
|
completions.add("create");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_AREA_CREATE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA_CREATE)) {
|
||||||
completions.add("single");
|
completions.add("single");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_AREA_LIST)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA_LIST)) {
|
||||||
completions.add("list");
|
completions.add("list");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_AREA_INFO)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA_INFO)) {
|
||||||
completions.add("info");
|
completions.add("info");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_AREA_TP)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA_TP)) {
|
||||||
completions.add("tp");
|
completions.add("tp");
|
||||||
}
|
}
|
||||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||||
@ -892,7 +893,7 @@ public class Area extends SubCommand {
|
|||||||
CommandCategory.ADMINISTRATION
|
CommandCategory.ADMINISTRATION
|
||||||
) {
|
) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
if (player.hasPermission(Permission.PERMISSION_AREA) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
|
@ -35,10 +35,10 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.services.plots.AutoQuery;
|
|
||||||
import com.plotsquared.core.services.plots.AutoService;
|
import com.plotsquared.core.services.plots.AutoService;
|
||||||
import com.plotsquared.core.util.EconHandler;
|
import com.plotsquared.core.util.EconHandler;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlotExpression;
|
import com.plotsquared.core.util.PlotExpression;
|
||||||
import com.plotsquared.core.util.task.AutoClaimFinishTask;
|
import com.plotsquared.core.util.task.AutoClaimFinishTask;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
@ -131,8 +131,8 @@ public class Auto extends SubCommand {
|
|||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_granted_plot"),
|
TranslatableCaption.of("economy.removed_granted_plot"),
|
||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
.tag("used_grants", Tag.inserting(Component.text(grantedPlots - left)))
|
.tag("usedGrants", Tag.inserting(Component.text(grantedPlots - left)))
|
||||||
.tag("remaining_grants", Tag.inserting(Component.text(left)))
|
.tag("remainingGrants", Tag.inserting(Component.text(left)))
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -249,12 +249,11 @@ public class Auto extends SubCommand {
|
|||||||
sizeX = event.getSizeX();
|
sizeX = event.getSizeX();
|
||||||
sizeZ = event.getSizeZ();
|
sizeZ = event.getSizeZ();
|
||||||
schematic = event.getSchematic();
|
schematic = event.getSchematic();
|
||||||
if (!force && mega && !player.hasPermission(Permission.PERMISSION_AUTO_MEGA)) {
|
if (!force && mega && !Permissions.hasPermission(player, Permission.PERMISSION_AUTO_MEGA)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AUTO_MEGA))
|
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_AUTO_MEGA))
|
||||||
);
|
);
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
if (!force && sizeX * sizeZ > Settings.Claim.MAX_AUTO_AREA) {
|
if (!force && sizeX * sizeZ > Settings.Claim.MAX_AUTO_AREA) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -284,9 +283,11 @@ public class Auto extends SubCommand {
|
|||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!force && !player.hasPermission(
|
if (!force && !Permissions.hasPermission(
|
||||||
|
player,
|
||||||
Permission.PERMISSION_CLAIM_SCHEMATIC.format(schematic)
|
Permission.PERMISSION_CLAIM_SCHEMATIC.format(schematic)
|
||||||
) && !player.hasPermission("plots.admin.command.schematic")) {
|
) && !Permissions
|
||||||
|
.hasPermission(player, "plots.admin.command.schematic")) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.claim.%s0")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.claim.%s0")))
|
||||||
@ -294,15 +295,12 @@ public class Auto extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.econHandler != null && plotarea.useEconomy() && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) {
|
if (this.econHandler != null && plotarea.useEconomy()) {
|
||||||
PlotExpression costExp = plotarea.getPrices().get("claim");
|
PlotExpression costExp = plotarea.getPrices().get("claim");
|
||||||
PlotExpression mergeCostExp = plotarea.getPrices().get("merge");
|
|
||||||
int size = sizeX * sizeZ;
|
|
||||||
double mergeCost = size <= 1 || mergeCostExp == null ? 0d : mergeCostExp.evaluate(size);
|
|
||||||
double cost = costExp.evaluate(Settings.Limit.GLOBAL ?
|
double cost = costExp.evaluate(Settings.Limit.GLOBAL ?
|
||||||
player.getPlotCount() :
|
player.getPlotCount() :
|
||||||
player.getPlotCount(plotarea.getWorldName()));
|
player.getPlotCount(plotarea.getWorldName()));
|
||||||
cost = size * cost + mergeCost;
|
cost = (sizeX * sizeZ) * cost;
|
||||||
if (cost > 0d) {
|
if (cost > 0d) {
|
||||||
if (!this.econHandler.isSupported()) {
|
if (!this.econHandler.isSupported()) {
|
||||||
player.sendMessage(TranslatableCaption.of("economy.vault_or_consumer_null"));
|
player.sendMessage(TranslatableCaption.of("economy.vault_or_consumer_null"));
|
||||||
@ -330,7 +328,7 @@ public class Auto extends SubCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
List<Plot> plots = this.servicePipeline
|
List<Plot> plots = this.servicePipeline
|
||||||
.pump(new AutoQuery(player, null, sizeX, sizeZ, plotarea))
|
.pump(new AutoService.AutoQuery(player, null, sizeX, sizeZ, plotarea))
|
||||||
.through(AutoService.class)
|
.through(AutoService.class)
|
||||||
.getResult();
|
.getResult();
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
|||||||
import com.plotsquared.core.permissions.Permission;
|
import com.plotsquared.core.permissions.Permission;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -149,7 +150,8 @@ public final class Backup extends Command {
|
|||||||
TranslatableCaption.of("generic.generic_merged").toComponent(player)
|
TranslatableCaption.of("generic.generic_merged").toComponent(player)
|
||||||
))
|
))
|
||||||
);
|
);
|
||||||
} else if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
} else if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -213,7 +215,8 @@ public final class Backup extends Command {
|
|||||||
);
|
);
|
||||||
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
||||||
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
||||||
} else if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
} else if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -298,7 +301,8 @@ public final class Backup extends Command {
|
|||||||
);
|
);
|
||||||
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
} else if (plot.getVolume() > Integer.MAX_VALUE) {
|
||||||
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
||||||
} else if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
} else if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_BACKUP_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
|
@ -27,6 +27,7 @@ import com.sk89q.worldedit.command.util.SuggestionHelper;
|
|||||||
import com.sk89q.worldedit.world.biome.BiomeType;
|
import com.sk89q.worldedit.world.biome.BiomeType;
|
||||||
import com.sk89q.worldedit.world.biome.BiomeTypes;
|
import com.sk89q.worldedit.world.biome.BiomeTypes;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
|
|
||||||
|
@ -132,7 +132,6 @@ public class Buy extends Command {
|
|||||||
plot.removeFlag(event.getFlag());
|
plot.removeFlag(event.getFlag());
|
||||||
}
|
}
|
||||||
plot.setOwner(player.getUUID());
|
plot.setOwner(player.getUUID());
|
||||||
plot.getPlotModificationManager().setSign(player.getName());
|
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("working.claimed"),
|
TranslatableCaption.of("working.claimed"),
|
||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
||||||
|
@ -29,6 +29,7 @@ import com.plotsquared.core.plot.flag.implementations.HostileCapFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.MiscCapFlag;
|
import com.plotsquared.core.plot.flag.implementations.MiscCapFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.MobCapFlag;
|
import com.plotsquared.core.plot.flag.implementations.MobCapFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.VehicleCapFlag;
|
import com.plotsquared.core.plot.flag.implementations.VehicleCapFlag;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.ComponentLike;
|
import net.kyori.adventure.text.ComponentLike;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
@ -53,7 +54,8 @@ public class Caps extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isAdded(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_CAPS_OTHER)) {
|
if (!plot.isAdded(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_CAPS_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_CAPS_OTHER))
|
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_ADMIN_CAPS_OTHER))
|
||||||
|
@ -35,6 +35,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.util.EconHandler;
|
import com.plotsquared.core.util.EconHandler;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlotExpression;
|
import com.plotsquared.core.util.PlotExpression;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -130,8 +131,9 @@ public class Claim extends SubCommand {
|
|||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLAIM_SCHEMATIC
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLAIM_SCHEMATIC
|
||||||
.format(schematic)) && !player.hasPermission(
|
.format(schematic)) && !Permissions.hasPermission(
|
||||||
|
player,
|
||||||
"plots.admin.command.schematic"
|
"plots.admin.command.schematic"
|
||||||
) && !force) {
|
) && !force) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -141,7 +143,7 @@ public class Claim extends SubCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (this.econHandler.isEnabled(area) && !force && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) {
|
if (this.econHandler.isEnabled(area) && !force) {
|
||||||
PlotExpression costExr = area.getPrices().get("claim");
|
PlotExpression costExr = area.getPrices().get("claim");
|
||||||
double cost = costExr.evaluate(currentPlots);
|
double cost = costExr.evaluate(currentPlots);
|
||||||
if (cost > 0d) {
|
if (cost > 0d) {
|
||||||
@ -186,13 +188,13 @@ public class Claim extends SubCommand {
|
|||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_granted_plot"),
|
TranslatableCaption.of("economy.removed_granted_plot"),
|
||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
.tag("used_grants", Tag.inserting(Component.text(grants - 1)))
|
.tag("usedGrants", Tag.inserting(Component.text(grants - 1)))
|
||||||
.tag("remaining_grants", Tag.inserting(Component.text(grants)))
|
.tag("remainingGrants", Tag.inserting(Component.text(grants)))
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_BYPASS_BORDER)) {
|
||||||
int border = area.getBorder();
|
int border = area.getBorder();
|
||||||
if (border != Integer.MAX_VALUE && plot.getDistanceFromOrigin() > border && !force) {
|
if (border != Integer.MAX_VALUE && plot.getDistanceFromOrigin() > border && !force) {
|
||||||
player.sendMessage(TranslatableCaption.of("border.denied"));
|
player.sendMessage(TranslatableCaption.of("border.denied"));
|
||||||
|
@ -32,6 +32,7 @@ import com.plotsquared.core.plot.flag.implementations.AnalysisFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.queue.GlobalBlockQueue;
|
import com.plotsquared.core.queue.GlobalBlockQueue;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
@ -90,14 +91,13 @@ public class Clear extends Command {
|
|||||||
}
|
}
|
||||||
boolean force = eventResult == Result.FORCE;
|
boolean force = eventResult == Result.FORCE;
|
||||||
checkTrue(
|
checkTrue(
|
||||||
force || plot.isOwner(player.getUUID()) || player.hasPermission("plots.admin.command.clear"),
|
force || plot.isOwner(player.getUUID()) || Permissions
|
||||||
|
.hasPermission(player, "plots.admin.command.clear"),
|
||||||
TranslatableCaption.of("permission.no_plot_perms")
|
TranslatableCaption.of("permission.no_plot_perms")
|
||||||
);
|
);
|
||||||
checkTrue(plot.getRunning() == 0, TranslatableCaption.of("errors.wait_for_timer"));
|
checkTrue(plot.getRunning() == 0, TranslatableCaption.of("errors.wait_for_timer"));
|
||||||
checkTrue(
|
checkTrue(force || !Settings.Done.RESTRICT_BUILDING || !DoneFlag.isDone(plot) || Permissions
|
||||||
force || !Settings.Done.RESTRICT_BUILDING || !DoneFlag.isDone(plot) || player.hasPermission("plots.continue"),
|
.hasPermission(player, "plots.continue"), TranslatableCaption.of("done.done_already_done"));
|
||||||
TranslatableCaption.of("done.done_already_done")
|
|
||||||
);
|
|
||||||
confirm.run(this, () -> {
|
confirm.run(this, () -> {
|
||||||
if (Settings.Teleport.ON_CLEAR) {
|
if (Settings.Teleport.ON_CLEAR) {
|
||||||
plot.getPlayersInPlot().forEach(playerInPlot -> plot.teleportPlayer(playerInPlot, TeleportCause.COMMAND_CLEAR,
|
plot.getPlayersInPlot().forEach(playerInPlot -> plot.teleportPlayer(playerInPlot, TeleportCause.COMMAND_CLEAR,
|
||||||
@ -107,7 +107,9 @@ public class Clear extends Command {
|
|||||||
}
|
}
|
||||||
BackupManager.backup(player, plot, () -> {
|
BackupManager.backup(player, plot, () -> {
|
||||||
final long start = System.currentTimeMillis();
|
final long start = System.currentTimeMillis();
|
||||||
boolean result = plot.getPlotModificationManager().clear(true, false, player, () -> TaskManager.runTask(() -> {
|
boolean result = plot.getPlotModificationManager().clear(true, false, player, () -> {
|
||||||
|
plot.getPlotModificationManager().unlink();
|
||||||
|
TaskManager.runTask(() -> {
|
||||||
plot.removeRunning();
|
plot.removeRunning();
|
||||||
// If the state changes, then mark it as no longer done
|
// If the state changes, then mark it as no longer done
|
||||||
if (DoneFlag.isDone(plot)) {
|
if (DoneFlag.isDone(plot)) {
|
||||||
@ -135,7 +137,8 @@ public class Clear extends Command {
|
|||||||
.tag("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
.tag("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
}));
|
});
|
||||||
|
});
|
||||||
if (!result) {
|
if (!result) {
|
||||||
player.sendMessage(TranslatableCaption.of("errors.wait_for_timer"));
|
player.sendMessage(TranslatableCaption.of("errors.wait_for_timer"));
|
||||||
} else {
|
} else {
|
||||||
|
@ -33,6 +33,7 @@ import com.plotsquared.core.plot.PlotArea;
|
|||||||
import com.plotsquared.core.plot.PlotCluster;
|
import com.plotsquared.core.plot.PlotCluster;
|
||||||
import com.plotsquared.core.plot.PlotId;
|
import com.plotsquared.core.plot.PlotId;
|
||||||
import com.plotsquared.core.util.ComponentHelper;
|
import com.plotsquared.core.util.ComponentHelper;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -46,7 +47,6 @@ import java.util.Collections;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
@ -78,8 +78,9 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
String sub = args[0].toLowerCase();
|
String sub = args[0].toLowerCase();
|
||||||
switch (sub) {
|
switch (sub) {
|
||||||
case "l", "list" -> {
|
case "l":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LIST)) {
|
case "list": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_LIST)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -133,8 +134,9 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "c", "create" -> {
|
case "c":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_CREATE)) {
|
case "create": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_CREATE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -211,7 +213,8 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
Set<Plot> plots = area.getPlotSelectionOwned(pos1, pos2);
|
Set<Plot> plots = area.getPlotSelectionOwned(pos1, pos2);
|
||||||
if (!plots.isEmpty()) {
|
if (!plots.isEmpty()) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_CREATE_OTHER)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_CLUSTER_CREATE_OTHER)) {
|
||||||
UUID uuid = player.getUUID();
|
UUID uuid = player.getUUID();
|
||||||
for (Plot plot : plots) {
|
for (Plot plot : plots) {
|
||||||
if (!plot.isOwner(uuid)) {
|
if (!plot.isOwner(uuid)) {
|
||||||
@ -235,8 +238,8 @@ public class Cluster extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
current = player.getPlayerClusterCount(player.getLocation().getWorldName());
|
current = player.getPlayerClusterCount(player.getLocation().getWorldName());
|
||||||
}
|
}
|
||||||
int allowed = player.hasPermissionRange(
|
int allowed = Permissions
|
||||||
Permission.PERMISSION_CLUSTER_SIZE,
|
.hasPermissionRange(player, Permission.PERMISSION_CLUSTER_SIZE,
|
||||||
Settings.Limit.MAX_PLOTS
|
Settings.Limit.MAX_PLOTS
|
||||||
);
|
);
|
||||||
if (current + cluster.getArea() > allowed) {
|
if (current + cluster.getArea() > allowed) {
|
||||||
@ -268,8 +271,10 @@ public class Cluster extends SubCommand {
|
|||||||
);
|
);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "disband", "del", "delete" -> {
|
case "disband":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_DELETE)) {
|
case "del":
|
||||||
|
case "delete": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_DELETE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -309,7 +314,8 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!cluster.owner.equals(player.getUUID())) {
|
if (!cluster.owner.equals(player.getUUID())) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_DELETE_OTHER)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_CLUSTER_DELETE_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -327,8 +333,9 @@ public class Cluster extends SubCommand {
|
|||||||
));
|
));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "res", "resize" -> {
|
case "res":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE)) {
|
case "resize": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -371,7 +378,8 @@ public class Cluster extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!cluster.hasHelperRights(player.getUUID())) {
|
if (!cluster.hasHelperRights(player.getUUID())) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE_OTHER)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -398,7 +406,8 @@ public class Cluster extends SubCommand {
|
|||||||
removed.removeAll(newPlots);
|
removed.removeAll(newPlots);
|
||||||
// Check expand / shrink
|
// Check expand / shrink
|
||||||
if (!removed.isEmpty()) {
|
if (!removed.isEmpty()) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE_SHRINK)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE_SHRINK)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -411,7 +420,8 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
newPlots.removeAll(existing);
|
newPlots.removeAll(existing);
|
||||||
if (!newPlots.isEmpty()) {
|
if (!newPlots.isEmpty()) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE_EXPAND)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE_EXPAND)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -430,8 +440,7 @@ public class Cluster extends SubCommand {
|
|||||||
current = player.getPlayerClusterCount(player.getLocation().getWorldName());
|
current = player.getPlayerClusterCount(player.getLocation().getWorldName());
|
||||||
}
|
}
|
||||||
current -= cluster.getArea() + (1 + pos2.getX() - pos1.getX()) * (1 + pos2.getY() - pos1.getY());
|
current -= cluster.getArea() + (1 + pos2.getX() - pos1.getX()) * (1 + pos2.getY() - pos1.getY());
|
||||||
int allowed = player.hasPermissionRange(
|
int allowed = Permissions.hasPermissionRange(player, Permission.PERMISSION_CLUSTER,
|
||||||
Permission.PERMISSION_CLUSTER,
|
|
||||||
Settings.Limit.MAX_PLOTS
|
Settings.Limit.MAX_PLOTS
|
||||||
);
|
);
|
||||||
if (current + cluster.getArea() > allowed) {
|
if (current + cluster.getArea() > allowed) {
|
||||||
@ -448,8 +457,10 @@ public class Cluster extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("cluster.cluster_resized"));
|
player.sendMessage(TranslatableCaption.of("cluster.cluster_resized"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "add", "inv", "invite" -> {
|
case "add":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INVITE)) {
|
case "inv":
|
||||||
|
case "invite": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_INVITE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -477,7 +488,8 @@ public class Cluster extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!cluster.hasHelperRights(player.getUUID())) {
|
if (!cluster.hasHelperRights(player.getUUID())) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INVITE_OTHER)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_CLUSTER_INVITE_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -517,8 +529,10 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "k", "remove", "kick" -> {
|
case "k":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_KICK)) {
|
case "remove":
|
||||||
|
case "kick": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_KICK)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -545,7 +559,8 @@ public class Cluster extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!cluster.hasHelperRights(player.getUUID())) {
|
if (!cluster.hasHelperRights(player.getUUID())) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_KICK_OTHER)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_CLUSTER_KICK_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -597,8 +612,9 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "quit", "leave" -> {
|
case "quit":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_LEAVE)) {
|
case "leave": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_LEAVE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -658,8 +674,8 @@ public class Cluster extends SubCommand {
|
|||||||
removePlayerPlots(cluster, uuid, player.getLocation().getWorldName());
|
removePlayerPlots(cluster, uuid, player.getLocation().getWorldName());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "members" -> {
|
case "members": {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_HELPERS)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_HELPERS)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -719,8 +735,10 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "spawn", "home", "tp" -> {
|
case "spawn":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_TP)) {
|
case "home":
|
||||||
|
case "tp": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_TP)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -752,7 +770,7 @@ public class Cluster extends SubCommand {
|
|||||||
}
|
}
|
||||||
UUID uuid = player.getUUID();
|
UUID uuid = player.getUUID();
|
||||||
if (!cluster.isAdded(uuid)) {
|
if (!cluster.isAdded(uuid)) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_TP_OTHER)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_TP_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -767,8 +785,11 @@ public class Cluster extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("cluster.cluster_teleporting"));
|
player.sendMessage(TranslatableCaption.of("cluster.cluster_teleporting"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "i", "info", "show", "information" -> {
|
case "i":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_INFO)) {
|
case "info":
|
||||||
|
case "show":
|
||||||
|
case "information": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_INFO)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -814,7 +835,11 @@ public class Cluster extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
|
player.sendMessage(TranslatableCaption.of("players.fetching_players_timeout"));
|
||||||
} else {
|
} else {
|
||||||
final String owner;
|
final String owner;
|
||||||
owner = Objects.requireNonNullElse(username, "unknown");
|
if (username == null) {
|
||||||
|
owner = "unknown";
|
||||||
|
} else {
|
||||||
|
owner = username;
|
||||||
|
}
|
||||||
String name = cluster.getName();
|
String name = cluster.getName();
|
||||||
String size = (cluster.getP2().getX() - cluster.getP1().getX() + 1) + "x" + (
|
String size = (cluster.getP2().getX() - cluster.getP1().getX() + 1) + "x" + (
|
||||||
cluster.getP2().getY() - cluster.getP1().getY() + 1);
|
cluster.getP2().getY() - cluster.getP1().getY() + 1);
|
||||||
@ -832,8 +857,10 @@ public class Cluster extends SubCommand {
|
|||||||
});
|
});
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "sh", "setspawn", "sethome" -> {
|
case "sh":
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_SETHOME)) {
|
case "setspawn":
|
||||||
|
case "sethome": {
|
||||||
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_SETHOME)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_CLUSTER_SETHOME))
|
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_CLUSTER_SETHOME))
|
||||||
@ -857,7 +884,8 @@ public class Cluster extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!cluster.hasHelperRights(player.getUUID())) {
|
if (!cluster.hasHelperRights(player.getUUID())) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_CLUSTER_SETHOME_OTHER)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_CLUSTER_SETHOME_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -909,37 +937,37 @@ public class Cluster extends SubCommand {
|
|||||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_LIST)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_LIST)) {
|
||||||
completions.add("list");
|
completions.add("list");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_CREATE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_CREATE)) {
|
||||||
completions.add("create");
|
completions.add("create");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_DELETE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_DELETE)) {
|
||||||
completions.add("delete");
|
completions.add("delete");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_RESIZE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_RESIZE)) {
|
||||||
completions.add("resize");
|
completions.add("resize");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_INVITE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_INVITE)) {
|
||||||
completions.add("invite");
|
completions.add("invite");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_KICK)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_KICK)) {
|
||||||
completions.add("kick");
|
completions.add("kick");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_KICK)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_KICK)) {
|
||||||
completions.add("leave");
|
completions.add("leave");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_HELPERS)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_HELPERS)) {
|
||||||
completions.add("members");
|
completions.add("members");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_INFO)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_INFO)) {
|
||||||
completions.add("info");
|
completions.add("info");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_TP)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_TP)) {
|
||||||
completions.add("tp");
|
completions.add("tp");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER_SETHOME)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER_SETHOME)) {
|
||||||
completions.add("sethome");
|
completions.add("sethome");
|
||||||
}
|
}
|
||||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||||
@ -954,7 +982,7 @@ public class Cluster extends SubCommand {
|
|||||||
CommandCategory.ADMINISTRATION
|
CommandCategory.ADMINISTRATION
|
||||||
) {
|
) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
if (player.hasPermission(Permission.PERMISSION_CLUSTER) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_CLUSTER) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
|
@ -25,6 +25,7 @@ import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
|||||||
import com.plotsquared.core.permissions.PermissionHolder;
|
import com.plotsquared.core.permissions.PermissionHolder;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.StringComparison;
|
import com.plotsquared.core.util.StringComparison;
|
||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
@ -482,7 +483,7 @@ public abstract class Command {
|
|||||||
if (message) {
|
if (message) {
|
||||||
player.sendMessage(this.required.getErrorMessage());
|
player.sendMessage(this.required.getErrorMessage());
|
||||||
}
|
}
|
||||||
} else if (!player.hasPermission(getPermission())) {
|
} else if (!Permissions.hasPermission(player, getPermission())) {
|
||||||
if (message) {
|
if (message) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -559,10 +560,9 @@ public abstract class Command {
|
|||||||
|
|
||||||
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 0 -> {
|
case 0:
|
||||||
return this.allCommands;
|
return this.allCommands;
|
||||||
}
|
case 1:
|
||||||
case 1 -> {
|
|
||||||
String arg = args[0].toLowerCase();
|
String arg = args[0].toLowerCase();
|
||||||
if (space) {
|
if (space) {
|
||||||
Command cmd = getCommand(arg);
|
Command cmd = getCommand(arg);
|
||||||
@ -581,8 +581,7 @@ public abstract class Command {
|
|||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
}
|
}
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
Command cmd = getCommand(args[0]);
|
Command cmd = getCommand(args[0]);
|
||||||
if (cmd != null) {
|
if (cmd != null) {
|
||||||
return cmd.tab(player, Arrays.copyOfRange(args, 1, args.length), space);
|
return cmd.tab(player, Arrays.copyOfRange(args, 1, args.length), space);
|
||||||
@ -591,7 +590,6 @@ public abstract class Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
@ -23,6 +23,7 @@ import com.plotsquared.core.configuration.caption.LocaleHolder;
|
|||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.ComponentLike;
|
||||||
import net.kyori.adventure.text.minimessage.MiniMessage;
|
import net.kyori.adventure.text.minimessage.MiniMessage;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
|
@ -29,6 +29,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.flag.PlotFlag;
|
import com.plotsquared.core.plot.flag.PlotFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
@ -54,7 +55,8 @@ public class Continue extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_CONTINUE)) {
|
if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_CONTINUE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(
|
TagResolver.resolver("node", Tag.inserting(
|
||||||
|
@ -23,6 +23,7 @@ import com.plotsquared.core.location.Location;
|
|||||||
import com.plotsquared.core.permissions.Permission;
|
import com.plotsquared.core.permissions.Permission;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
@ -43,7 +44,8 @@ public class Copy extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot1.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN.toString())) {
|
if (!plot1.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN.toString())) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -69,8 +71,7 @@ public class Copy extends SubCommand {
|
|||||||
|
|
||||||
plot1.getPlotModificationManager().copy(plot2, player).thenAccept(result -> {
|
plot1.getPlotModificationManager().copy(plot2, player).thenAccept(result -> {
|
||||||
if (result) {
|
if (result) {
|
||||||
player.sendMessage(
|
player.sendMessage(TranslatableCaption.of("move.copy_success"),
|
||||||
TranslatableCaption.of("move.copy_success"),
|
|
||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
.tag("origin", Tag.inserting(Component.text(plot1.toString())))
|
.tag("origin", Tag.inserting(Component.text(plot1.toString())))
|
||||||
.tag("target", Tag.inserting(Component.text(plot2.toString())))
|
.tag("target", Tag.inserting(Component.text(plot2.toString())))
|
||||||
|
@ -184,7 +184,7 @@ public class DatabaseCommand extends SubCommand {
|
|||||||
);
|
);
|
||||||
worldFile.renameTo(newFile);
|
worldFile.renameTo(newFile);
|
||||||
}
|
}
|
||||||
plot.setId(newId);
|
plot.setId(newId.copy());
|
||||||
plot.setArea(pa);
|
plot.setArea(pa);
|
||||||
plots.add(plot);
|
plots.add(plot);
|
||||||
continue;
|
continue;
|
||||||
|
@ -34,6 +34,8 @@ import com.plotsquared.core.uuid.UUIDMapping;
|
|||||||
import com.sk89q.worldedit.world.entity.EntityType;
|
import com.sk89q.worldedit.world.entity.EntityType;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
package com.plotsquared.core.command;
|
package com.plotsquared.core.command;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.plotsquared.core.PlotSquared;
|
|
||||||
import com.plotsquared.core.configuration.caption.StaticCaption;
|
import com.plotsquared.core.configuration.caption.StaticCaption;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.events.PlotFlagRemoveEvent;
|
import com.plotsquared.core.events.PlotFlagRemoveEvent;
|
||||||
@ -28,6 +27,7 @@ import com.plotsquared.core.generator.HybridUtils;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
|
import com.plotsquared.core.plot.expiration.ExpireManager;
|
||||||
import com.plotsquared.core.plot.expiration.PlotAnalysis;
|
import com.plotsquared.core.plot.expiration.PlotAnalysis;
|
||||||
import com.plotsquared.core.plot.flag.GlobalFlagContainer;
|
import com.plotsquared.core.plot.flag.GlobalFlagContainer;
|
||||||
import com.plotsquared.core.plot.flag.PlotFlag;
|
import com.plotsquared.core.plot.flag.PlotFlag;
|
||||||
@ -143,7 +143,10 @@ public class DebugExec extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "start-expire" -> {
|
case "start-expire" -> {
|
||||||
if (PlotSquared.platform().expireManager().runAutomatedTask()) {
|
if (ExpireManager.IMP == null) {
|
||||||
|
ExpireManager.IMP = new ExpireManager(this.eventDispatcher);
|
||||||
|
}
|
||||||
|
if (ExpireManager.IMP.runAutomatedTask()) {
|
||||||
player.sendMessage(TranslatableCaption.of("debugexec.expiry_started"));
|
player.sendMessage(TranslatableCaption.of("debugexec.expiry_started"));
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(TranslatableCaption.of("debugexec.expiry_already_started"));
|
player.sendMessage(TranslatableCaption.of("debugexec.expiry_already_started"));
|
||||||
@ -151,7 +154,7 @@ public class DebugExec extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
case "stop-expire" -> {
|
case "stop-expire" -> {
|
||||||
if (!PlotSquared.platform().expireManager().cancelTask()) {
|
if (ExpireManager.IMP == null || !ExpireManager.IMP.cancelTask()) {
|
||||||
player.sendMessage(TranslatableCaption.of("debugexec.task_halted"));
|
player.sendMessage(TranslatableCaption.of("debugexec.task_halted"));
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(TranslatableCaption.of("debugexec.task_cancelled"));
|
player.sendMessage(TranslatableCaption.of("debugexec.task_cancelled"));
|
||||||
|
@ -75,13 +75,11 @@ public class DebugRoadRegen extends SubCommand {
|
|||||||
}
|
}
|
||||||
String kind = args[0].toLowerCase();
|
String kind = args[0].toLowerCase();
|
||||||
switch (kind) {
|
switch (kind) {
|
||||||
case "plot" -> {
|
case "plot":
|
||||||
return regenPlot(player);
|
return regenPlot(player);
|
||||||
}
|
case "region":
|
||||||
case "region" -> {
|
|
||||||
return regenRegion(player, Arrays.copyOfRange(args, 1, args.length));
|
return regenRegion(player, Arrays.copyOfRange(args, 1, args.length));
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("commandconfig.command_syntax"),
|
TranslatableCaption.of("commandconfig.command_syntax"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
|
TagResolver.resolver("value", Tag.inserting(Component.text(DebugRoadRegen.USAGE)))
|
||||||
@ -89,14 +87,12 @@ public class DebugRoadRegen extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
public boolean regenPlot(PlotPlayer<?> player) {
|
public boolean regenPlot(PlotPlayer<?> player) {
|
||||||
Location location = player.getLocation();
|
Location location = player.getLocation();
|
||||||
PlotArea area = location.getPlotArea();
|
PlotArea area = location.getPlotArea();
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot_world"));
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
Plot plot = player.getCurrentPlot();
|
Plot plot = player.getCurrentPlot();
|
||||||
if (plot == null) {
|
if (plot == null) {
|
||||||
|
@ -30,6 +30,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.util.EconHandler;
|
import com.plotsquared.core.util.EconHandler;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlotExpression;
|
import com.plotsquared.core.util.PlotExpression;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -84,7 +85,8 @@ public class Delete extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
boolean force = eventResult == Result.FORCE;
|
boolean force = eventResult == Result.FORCE;
|
||||||
if (!force && !plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_DELETE)) {
|
if (!force && !plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_DELETE)) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlayerManager;
|
import com.plotsquared.core.util.PlayerManager;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
@ -80,12 +81,13 @@ public class Deny extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_DENY)) {
|
if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_DENY)) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int maxDenySize = player.hasPermissionRange(Permission.PERMISSION_DENY, Settings.Limit.MAX_PLOTS);
|
int maxDenySize = Permissions.hasPermissionRange(player, Permission.PERMISSION_DENY, Settings.Limit.MAX_PLOTS);
|
||||||
int size = plot.getDenied().size();
|
int size = plot.getDenied().size();
|
||||||
if (size >= maxDenySize) {
|
if (size >= maxDenySize) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -106,7 +108,8 @@ public class Deny extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
for (UUID uuid : uuids) {
|
for (UUID uuid : uuids) {
|
||||||
if (uuid == DBFunc.EVERYONE && !(
|
if (uuid == DBFunc.EVERYONE && !(
|
||||||
player.hasPermission(Permission.PERMISSION_DENY_EVERYONE) || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_DENY))) {
|
Permissions.hasPermission(player, Permission.PERMISSION_DENY_EVERYONE) || Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_DENY))) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
||||||
|
@ -21,6 +21,7 @@ package com.plotsquared.core.command;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.plotsquared.core.permissions.Permission;
|
import com.plotsquared.core.permissions.Permission;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
@ -53,7 +54,7 @@ public class Dislike extends SubCommand {
|
|||||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS)) {
|
||||||
completions.add("purge");
|
completions.add("purge");
|
||||||
}
|
}
|
||||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||||
@ -61,7 +62,7 @@ public class Dislike extends SubCommand {
|
|||||||
.startsWith(args[0].toLowerCase()))
|
.startsWith(args[0].toLowerCase()))
|
||||||
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.INFO) {
|
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.INFO) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
if (player.hasPermission(Permission.PERMISSION_RATE) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_RATE) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
|
@ -19,7 +19,6 @@
|
|||||||
package com.plotsquared.core.command;
|
package com.plotsquared.core.command;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
import com.plotsquared.core.PlotSquared;
|
|
||||||
import com.plotsquared.core.configuration.Settings;
|
import com.plotsquared.core.configuration.Settings;
|
||||||
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
import com.plotsquared.core.configuration.caption.TranslatableCaption;
|
||||||
import com.plotsquared.core.events.PlotDoneEvent;
|
import com.plotsquared.core.events.PlotDoneEvent;
|
||||||
@ -30,10 +29,12 @@ import com.plotsquared.core.location.Location;
|
|||||||
import com.plotsquared.core.permissions.Permission;
|
import com.plotsquared.core.permissions.Permission;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
|
import com.plotsquared.core.plot.expiration.ExpireManager;
|
||||||
import com.plotsquared.core.plot.expiration.PlotAnalysis;
|
import com.plotsquared.core.plot.expiration.PlotAnalysis;
|
||||||
import com.plotsquared.core.plot.flag.PlotFlag;
|
import com.plotsquared.core.plot.flag.PlotFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
@ -76,7 +77,8 @@ public class Done extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
boolean force = event.getEventResult() == Result.FORCE;
|
boolean force = event.getEventResult() == Result.FORCE;
|
||||||
if (!force && !plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_DONE)) {
|
if (!force && !plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_DONE)) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -94,7 +96,7 @@ public class Done extends SubCommand {
|
|||||||
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
TagResolver.resolver("plot", Tag.inserting(Component.text(plot.getId().toString())))
|
||||||
);
|
);
|
||||||
final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done");
|
final Settings.Auto_Clear doneRequirements = Settings.AUTO_CLEAR.get("done");
|
||||||
if (PlotSquared.platform().expireManager() == null || doneRequirements == null) {
|
if (ExpireManager.IMP == null || doneRequirements == null) {
|
||||||
finish(plot, player, true);
|
finish(plot, player, true);
|
||||||
plot.removeRunning();
|
plot.removeRunning();
|
||||||
} else {
|
} else {
|
||||||
@ -103,7 +105,7 @@ public class Done extends SubCommand {
|
|||||||
public void run(PlotAnalysis value) {
|
public void run(PlotAnalysis value) {
|
||||||
plot.removeRunning();
|
plot.removeRunning();
|
||||||
boolean result =
|
boolean result =
|
||||||
value.getComplexity(doneRequirements) >= doneRequirements.THRESHOLD;
|
value.getComplexity(doneRequirements) <= doneRequirements.THRESHOLD;
|
||||||
finish(plot, player, result);
|
finish(plot, player, result);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -27,6 +27,7 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlotUploader;
|
import com.plotsquared.core.util.PlotUploader;
|
||||||
import com.plotsquared.core.util.SchematicHandler;
|
import com.plotsquared.core.util.SchematicHandler;
|
||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
@ -88,11 +89,13 @@ public class Download extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ((Settings.Done.REQUIRED_FOR_DOWNLOAD && !DoneFlag.isDone(plot)) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_DOWNLOAD)) {
|
if ((Settings.Done.REQUIRED_FOR_DOWNLOAD && !DoneFlag.isDone(plot)) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_DOWNLOAD)) {
|
||||||
player.sendMessage(TranslatableCaption.of("done.done_not_done"));
|
player.sendMessage(TranslatableCaption.of("done.done_not_done"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN.toString())) {
|
if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN.toString())) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -110,7 +113,7 @@ public class Download extends SubCommand {
|
|||||||
upload(player, plot);
|
upload(player, plot);
|
||||||
} else if (args.length == 1 && StringMan
|
} else if (args.length == 1 && StringMan
|
||||||
.isEqualIgnoreCaseToAny(args[0], "mcr", "world", "mca")) {
|
.isEqualIgnoreCaseToAny(args[0], "mcr", "world", "mca")) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_DOWNLOAD_WORLD)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_DOWNLOAD_WORLD)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -155,10 +158,10 @@ public class Download extends SubCommand {
|
|||||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_DOWNLOAD)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_DOWNLOAD)) {
|
||||||
completions.add("schem");
|
completions.add("schem");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_DOWNLOAD_WORLD)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_DOWNLOAD_WORLD)) {
|
||||||
completions.add("world");
|
completions.add("world");
|
||||||
}
|
}
|
||||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||||
@ -173,7 +176,7 @@ public class Download extends SubCommand {
|
|||||||
CommandCategory.ADMINISTRATION
|
CommandCategory.ADMINISTRATION
|
||||||
) {
|
) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
if (player.hasPermission(Permission.PERMISSION_DOWNLOAD) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_DOWNLOAD) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
@ -185,14 +188,10 @@ public class Download extends SubCommand {
|
|||||||
if (Settings.Web.LEGACY_WEBINTERFACE) {
|
if (Settings.Web.LEGACY_WEBINTERFACE) {
|
||||||
schematicHandler
|
schematicHandler
|
||||||
.getCompoundTag(plot)
|
.getCompoundTag(plot)
|
||||||
.whenComplete((compoundTag, throwable) -> schematicHandler.upload(
|
.whenComplete((compoundTag, throwable) -> {
|
||||||
compoundTag,
|
schematicHandler.upload(compoundTag, null, null, new RunnableVal<>() {
|
||||||
null,
|
|
||||||
null,
|
|
||||||
new RunnableVal<>() {
|
|
||||||
@Override
|
@Override
|
||||||
public void run(URL value) {
|
public void run(URL value) {
|
||||||
plot.removeRunning();
|
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("web.generation_link_success"),
|
TranslatableCaption.of("web.generation_link_success"),
|
||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
@ -202,8 +201,8 @@ public class Download extends SubCommand {
|
|||||||
);
|
);
|
||||||
player.sendMessage(StaticCaption.of(value.toString()));
|
player.sendMessage(StaticCaption.of(value.toString()));
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
));
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// TODO legacy support
|
// TODO legacy support
|
||||||
|
@ -39,6 +39,7 @@ import com.plotsquared.core.plot.flag.types.IntegerFlag;
|
|||||||
import com.plotsquared.core.plot.flag.types.ListFlag;
|
import com.plotsquared.core.plot.flag.types.ListFlag;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.StringComparison;
|
import com.plotsquared.core.util.StringComparison;
|
||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
import com.plotsquared.core.util.helpmenu.HelpMenu;
|
import com.plotsquared.core.util.helpmenu.HelpMenu;
|
||||||
@ -131,7 +132,7 @@ public final class FlagCommand extends Command {
|
|||||||
key.toLowerCase(),
|
key.toLowerCase(),
|
||||||
entry.toString().toLowerCase()
|
entry.toString().toLowerCase()
|
||||||
);
|
);
|
||||||
final boolean result = player.hasPermission(permission);
|
final boolean result = Permissions.hasPermission(player, permission);
|
||||||
if (!result) {
|
if (!result) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -158,9 +159,9 @@ public final class FlagCommand extends Command {
|
|||||||
boolean result;
|
boolean result;
|
||||||
String basePerm = Permission.PERMISSION_SET_FLAG_KEY.format(key.toLowerCase());
|
String basePerm = Permission.PERMISSION_SET_FLAG_KEY.format(key.toLowerCase());
|
||||||
if (flag.isValuedPermission()) {
|
if (flag.isValuedPermission()) {
|
||||||
result = player.hasKeyedPermission(basePerm, value);
|
result = Permissions.hasKeyedPermission(player, basePerm, value);
|
||||||
} else {
|
} else {
|
||||||
result = player.hasPermission(basePerm);
|
result = Permissions.hasPermission(player, basePerm);
|
||||||
perm = basePerm;
|
perm = basePerm;
|
||||||
}
|
}
|
||||||
if (!result) {
|
if (!result) {
|
||||||
@ -188,7 +189,8 @@ public final class FlagCommand extends Command {
|
|||||||
player.sendMessage(TranslatableCaption.of("working.plot_not_claimed"));
|
player.sendMessage(TranslatableCaption.of("working.plot_not_claimed"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_SET_FLAG_OTHER)) {
|
if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_SET_FLAG_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_SET_FLAG_OTHER))
|
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_SET_FLAG_OTHER))
|
||||||
@ -484,7 +486,6 @@ public final class FlagCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final Plot plot = player.getLocation().getPlotAbs();
|
final Plot plot = player.getLocation().getPlotAbs();
|
||||||
final PlotFlag<?, ?> flagWithOldValue = plot.getFlagContainer().getFlag(flag.getClass());
|
|
||||||
PlotFlagRemoveEvent event = eventDispatcher.callFlagRemove(flag, plot);
|
PlotFlagRemoveEvent event = eventDispatcher.callFlagRemove(flag, plot);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -495,7 +496,7 @@ public final class FlagCommand extends Command {
|
|||||||
}
|
}
|
||||||
boolean force = event.getEventResult() == Result.FORCE;
|
boolean force = event.getEventResult() == Result.FORCE;
|
||||||
flag = event.getFlag();
|
flag = event.getFlag();
|
||||||
if (!force && !player.hasPermission(Permission.PERMISSION_SET_FLAG_KEY.format(args[0].toLowerCase()))) {
|
if (!force && !Permissions.hasPermission(player, Permission.PERMISSION_SET_FLAG_KEY.format(args[0].toLowerCase()))) {
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
@ -681,8 +682,8 @@ public final class FlagCommand extends Command {
|
|||||||
TranslatableCaption.of("flag.flag_info_example"),
|
TranslatableCaption.of("flag.flag_info_example"),
|
||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
.tag("command", Tag.preProcessParsed("/plot flag set"))
|
.tag("command", Tag.preProcessParsed("/plot flag set"))
|
||||||
.tag("flag", Tag.preProcessParsed(plotFlag.getName()))
|
.tag("flag", Tag.inserting(Component.text(plotFlag.getName())))
|
||||||
.tag("value", Tag.preProcessParsed(plotFlag.getExample()))
|
.tag("value", Tag.inserting(Component.text(plotFlag.getExample())))
|
||||||
.build()
|
.build()
|
||||||
);
|
);
|
||||||
// Default value
|
// Default value
|
||||||
|
@ -26,11 +26,13 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.MetaDataAccess;
|
import com.plotsquared.core.player.MetaDataAccess;
|
||||||
import com.plotsquared.core.player.PlayerMetaDataKeys;
|
import com.plotsquared.core.player.PlayerMetaDataKeys;
|
||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlayerManager;
|
import com.plotsquared.core.util.PlayerManager;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
|
import com.plotsquared.core.uuid.UUIDMapping;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
@ -40,7 +42,6 @@ import java.util.Collections;
|
|||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.TimeoutException;
|
import java.util.concurrent.TimeoutException;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -70,7 +71,7 @@ public class Grant extends Command {
|
|||||||
final String arg0 = args[0].toLowerCase();
|
final String arg0 = args[0].toLowerCase();
|
||||||
switch (arg0) {
|
switch (arg0) {
|
||||||
case "add", "check" -> {
|
case "add", "check" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_GRANT.format(arg0))) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_GRANT.format(arg0))) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_GRANT.format(arg0))))
|
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_GRANT.format(arg0))))
|
||||||
@ -89,8 +90,8 @@ public class Grant extends Command {
|
|||||||
TagResolver.resolver("value", Tag.inserting(Component.text(String.valueOf(uuids))))
|
TagResolver.resolver("value", Tag.inserting(Component.text(String.valueOf(uuids))))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
final UUID uuid = uuids.iterator().next();
|
final UUIDMapping uuid = uuids.toArray(new UUIDMapping[0])[0];
|
||||||
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuid);
|
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuid.getUuid());
|
||||||
if (pp != null) {
|
if (pp != null) {
|
||||||
try (final MetaDataAccess<Integer> access = pp.accessPersistentMetaData(
|
try (final MetaDataAccess<Integer> access = pp.accessPersistentMetaData(
|
||||||
PlayerMetaDataKeys.PERSISTENT_GRANTED_PLOTS)) {
|
PlayerMetaDataKeys.PERSISTENT_GRANTED_PLOTS)) {
|
||||||
@ -104,7 +105,7 @@ public class Grant extends Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
DBFunc.getPersistentMeta(uuid, new RunnableVal<>() {
|
DBFunc.getPersistentMeta(uuid.getUuid(), new RunnableVal<>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(Map<String, byte[]> value) {
|
public void run(Map<String, byte[]> value) {
|
||||||
final byte[] array = value.get("grantedPlots");
|
final byte[] array = value.get("grantedPlots");
|
||||||
@ -129,7 +130,7 @@ public class Grant extends Command {
|
|||||||
boolean replace = array != null;
|
boolean replace = array != null;
|
||||||
String key = "grantedPlots";
|
String key = "grantedPlots";
|
||||||
byte[] rawData = Ints.toByteArray(amount);
|
byte[] rawData = Ints.toByteArray(amount);
|
||||||
DBFunc.addPersistentMeta(uuid, key, rawData, replace);
|
DBFunc.addPersistentMeta(uuid.getUuid(), key, rawData, replace);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("grants.added"),
|
TranslatableCaption.of("grants.added"),
|
||||||
TagResolver.resolver("grants", Tag.inserting(Component.text(amount)))
|
TagResolver.resolver("grants", Tag.inserting(Component.text(amount)))
|
||||||
@ -151,10 +152,10 @@ public class Grant extends Command {
|
|||||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_GRANT_ADD)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_GRANT_ADD)) {
|
||||||
completions.add("add");
|
completions.add("add");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_GRANT_CHECK)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_GRANT_CHECK)) {
|
||||||
completions.add("check");
|
completions.add("check");
|
||||||
}
|
}
|
||||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||||
@ -169,7 +170,7 @@ public class Grant extends Command {
|
|||||||
CommandCategory.ADMINISTRATION
|
CommandCategory.ADMINISTRATION
|
||||||
) {
|
) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
if (player.hasPermission(Permission.PERMISSION_GRANT_SINGLE) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_GRANT_SINGLE) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
|
@ -60,10 +60,9 @@ public class Help extends Command {
|
|||||||
RunnableVal2<Command, CommandResult> whenDone
|
RunnableVal2<Command, CommandResult> whenDone
|
||||||
) {
|
) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 0 -> {
|
case 0:
|
||||||
return displayHelp(player, null, 0);
|
return displayHelp(player, null, 0);
|
||||||
}
|
case 1:
|
||||||
case 1 -> {
|
|
||||||
if (MathMan.isInteger(args[0])) {
|
if (MathMan.isInteger(args[0])) {
|
||||||
try {
|
try {
|
||||||
return displayHelp(player, null, Integer.parseInt(args[0]));
|
return displayHelp(player, null, Integer.parseInt(args[0]));
|
||||||
@ -73,8 +72,7 @@ public class Help extends Command {
|
|||||||
} else {
|
} else {
|
||||||
return displayHelp(player, args[0], 1);
|
return displayHelp(player, args[0], 1);
|
||||||
}
|
}
|
||||||
}
|
case 2:
|
||||||
case 2 -> {
|
|
||||||
if (MathMan.isInteger(args[1])) {
|
if (MathMan.isInteger(args[1])) {
|
||||||
try {
|
try {
|
||||||
return displayHelp(player, args[0], Integer.parseInt(args[1]));
|
return displayHelp(player, args[0], Integer.parseInt(args[1]));
|
||||||
@ -83,8 +81,8 @@ public class Help extends Command {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
default:
|
||||||
default -> sendUsage(player);
|
sendUsage(player);
|
||||||
}
|
}
|
||||||
return CompletableFuture.completedFuture(true);
|
return CompletableFuture.completedFuture(true);
|
||||||
}
|
}
|
||||||
@ -134,12 +132,7 @@ public class Help extends Command {
|
|||||||
TagResolver.builder()
|
TagResolver.builder()
|
||||||
.tag("command", Tag.inserting(Component.text("/plot help")))
|
.tag("command", Tag.inserting(Component.text("/plot help")))
|
||||||
.tag("category", Tag.inserting(Component.text("all")))
|
.tag("category", Tag.inserting(Component.text("all")))
|
||||||
.tag(
|
.tag("category_desc", Tag.inserting(Component.text("Display all commands")))
|
||||||
"category_desc",
|
|
||||||
Tag.inserting(TranslatableCaption
|
|
||||||
.of("help.help_display_all_commands")
|
|
||||||
.toComponent(player))
|
|
||||||
)
|
|
||||||
.build()
|
.build()
|
||||||
));
|
));
|
||||||
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption
|
builder.append(Component.newline()).append(MINI_MESSAGE.deserialize(TranslatableCaption
|
||||||
|
@ -29,6 +29,7 @@ import com.plotsquared.core.plot.PlotArea;
|
|||||||
import com.plotsquared.core.plot.PlotId;
|
import com.plotsquared.core.plot.PlotId;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import com.plotsquared.core.util.query.SortingStrategy;
|
import com.plotsquared.core.util.query.SortingStrategy;
|
||||||
@ -107,7 +108,8 @@ public class HomeCommand extends Command {
|
|||||||
// /plot home <[area;]x;y>
|
// /plot home <[area;]x;y>
|
||||||
// /plot home <area> <x;y>
|
// /plot home <area> <x;y>
|
||||||
// /plot home <area> <page>
|
// /plot home <area> <page>
|
||||||
if (!player.hasPermission(Permission.PERMISSION_VISIT_OWNED) && !player.hasPermission(Permission.PERMISSION_HOME)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_VISIT_OWNED) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_HOME)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_VISIT_OWNED.toString())))
|
TagResolver.resolver("node", Tag.inserting(Component.text(Permission.PERMISSION_VISIT_OWNED.toString())))
|
||||||
|
@ -29,6 +29,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.comment.CommentInbox;
|
import com.plotsquared.core.plot.comment.CommentInbox;
|
||||||
import com.plotsquared.core.plot.comment.CommentManager;
|
import com.plotsquared.core.plot.comment.CommentManager;
|
||||||
import com.plotsquared.core.plot.comment.PlotComment;
|
import com.plotsquared.core.plot.comment.PlotComment;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
@ -85,24 +86,24 @@ public class Inbox extends SubCommand {
|
|||||||
for (int x = page * 12; x < max; x++) {
|
for (int x = page * 12; x < max; x++) {
|
||||||
PlotComment comment = comments[x];
|
PlotComment comment = comments[x];
|
||||||
Component commentColored;
|
Component commentColored;
|
||||||
if (player.getName().equals(comment.senderName())) {
|
if (player.getName().equals(comment.senderName)) {
|
||||||
commentColored = MINI_MESSAGE
|
commentColored = MINI_MESSAGE
|
||||||
.deserialize(
|
.deserialize(
|
||||||
TranslatableCaption.of("list.comment_list_by_lister").getComponent(player),
|
TranslatableCaption.of("list.comment_list_by_lister").getComponent(player),
|
||||||
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment())))
|
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment)))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
commentColored = MINI_MESSAGE
|
commentColored = MINI_MESSAGE
|
||||||
.deserialize(
|
.deserialize(
|
||||||
TranslatableCaption.of("list.comment_list_by_other").getComponent(player),
|
TranslatableCaption.of("list.comment_list_by_other").getComponent(player),
|
||||||
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment())))
|
TagResolver.resolver("comment", Tag.inserting(Component.text(comment.comment)))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
TagResolver resolver = TagResolver.builder()
|
TagResolver resolver = TagResolver.builder()
|
||||||
.tag("number", Tag.inserting(Component.text(x)))
|
.tag("number", Tag.inserting(Component.text(x)))
|
||||||
.tag("world", Tag.inserting(Component.text(comment.world())))
|
.tag("world", Tag.inserting(Component.text(comment.world)))
|
||||||
.tag("plot_id", Tag.inserting(Component.text(comment.id().getX() + ";" + comment.id().getY())))
|
.tag("plot_id", Tag.inserting(Component.text(comment.id.getX() + ";" + comment.id.getY())))
|
||||||
.tag("commenter", Tag.inserting(Component.text(comment.senderName())))
|
.tag("commenter", Tag.inserting(Component.text(comment.senderName)))
|
||||||
.tag("comment", Tag.inserting(commentColored))
|
.tag("comment", Tag.inserting(commentColored))
|
||||||
.build();
|
.build();
|
||||||
builder.append(MINI_MESSAGE
|
builder.append(MINI_MESSAGE
|
||||||
@ -137,7 +138,7 @@ public class Inbox extends SubCommand {
|
|||||||
int unread = 0;
|
int unread = 0;
|
||||||
for (PlotComment comment : value) {
|
for (PlotComment comment : value) {
|
||||||
total++;
|
total++;
|
||||||
if (comment.timestamp() > CommentManager
|
if (comment.timestamp > CommentManager
|
||||||
.getTimestamp(player, inbox.toString())) {
|
.getTimestamp(player, inbox.toString())) {
|
||||||
unread++;
|
unread++;
|
||||||
}
|
}
|
||||||
@ -190,7 +191,7 @@ public class Inbox extends SubCommand {
|
|||||||
final int page;
|
final int page;
|
||||||
if (args.length > 1) {
|
if (args.length > 1) {
|
||||||
switch (args[1].toLowerCase()) {
|
switch (args[1].toLowerCase()) {
|
||||||
case "delete" -> {
|
case "delete":
|
||||||
if (!inbox.canModify(plot, player)) {
|
if (!inbox.canModify(plot, player)) {
|
||||||
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
|
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
|
||||||
return false;
|
return false;
|
||||||
@ -225,6 +226,7 @@ public class Inbox extends SubCommand {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!inbox.getComments(plot, new RunnableVal<>() {
|
if (!inbox.getComments(plot, new RunnableVal<>() {
|
||||||
@Override
|
@Override
|
||||||
public void run(List<PlotComment> value) {
|
public void run(List<PlotComment> value) {
|
||||||
@ -241,7 +243,7 @@ public class Inbox extends SubCommand {
|
|||||||
if (success) {
|
if (success) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("comment.comment_removed_success"),
|
TranslatableCaption.of("comment.comment_removed_success"),
|
||||||
TagResolver.resolver("value", Tag.inserting(Component.text(comment.comment())))
|
TagResolver.resolver("value", Tag.inserting(Component.text(comment.comment)))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -253,8 +255,7 @@ public class Inbox extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
case "clear":
|
||||||
case "clear" -> {
|
|
||||||
if (!inbox.canModify(plot, player)) {
|
if (!inbox.canModify(plot, player)) {
|
||||||
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
|
player.sendMessage(TranslatableCaption.of("comment.no_perm_inbox_modify"));
|
||||||
}
|
}
|
||||||
@ -268,8 +269,7 @@ public class Inbox extends SubCommand {
|
|||||||
plot.getPlotCommentContainer().removeComments(comments);
|
plot.getPlotCommentContainer().removeComments(comments);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
default:
|
||||||
default -> {
|
|
||||||
try {
|
try {
|
||||||
page = Integer.parseInt(args[1]);
|
page = Integer.parseInt(args[1]);
|
||||||
} catch (NumberFormatException ignored) {
|
} catch (NumberFormatException ignored) {
|
||||||
@ -277,7 +277,6 @@ public class Inbox extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
page = 1;
|
page = 1;
|
||||||
}
|
}
|
||||||
@ -301,13 +300,13 @@ public class Inbox extends SubCommand {
|
|||||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_INBOX_READ_OWNER)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_INBOX_READ_OWNER)) {
|
||||||
completions.add("owner");
|
completions.add("owner");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_INBOX_READ_PUBLIC)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_INBOX_READ_PUBLIC)) {
|
||||||
completions.add("public");
|
completions.add("public");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_INBOX_READ_REPORT)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_INBOX_READ_REPORT)) {
|
||||||
completions.add("report");
|
completions.add("report");
|
||||||
}
|
}
|
||||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||||
@ -315,7 +314,7 @@ public class Inbox extends SubCommand {
|
|||||||
.startsWith(args[0].toLowerCase()))
|
.startsWith(args[0].toLowerCase()))
|
||||||
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.CHAT) {
|
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.CHAT) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
if (player.hasPermission(Permission.PERMISSION_INBOX) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_INBOX) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
|
@ -27,6 +27,7 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.flag.implementations.HideInfoFlag;
|
import com.plotsquared.core.plot.flag.implementations.HideInfoFlag;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
@ -52,8 +53,7 @@ public class Info extends SubCommand {
|
|||||||
arg = args[0];
|
arg = args[0];
|
||||||
switch (arg) {
|
switch (arg) {
|
||||||
// TODO: (re?)implement /plot info inv. (it was never properly implemented)
|
// TODO: (re?)implement /plot info inv. (it was never properly implemented)
|
||||||
case "trusted", "alias", "biome", "denied", "flags", "id", "size", "members", "creationdate", "seen", "owner", "rating", "likes" ->
|
case "trusted", "alias", "biome", "denied", "flags", "id", "size", "members", "creationdate", "seen", "owner", "rating", "likes" -> plot = Plot
|
||||||
plot = Plot
|
|
||||||
.getPlotFromString(player, null, false);
|
.getPlotFromString(player, null, false);
|
||||||
default -> {
|
default -> {
|
||||||
plot = Plot.getPlotFromString(player, arg, false);
|
plot = Plot.getPlotFromString(player, arg, false);
|
||||||
@ -152,7 +152,7 @@ public class Info extends SubCommand {
|
|||||||
@Override
|
@Override
|
||||||
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_AREA_INFO_FORCE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA_INFO_FORCE)) {
|
||||||
completions.add("-f");
|
completions.add("-f");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -162,7 +162,7 @@ public class Info extends SubCommand {
|
|||||||
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.INFO) {
|
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.INFO) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
|
|
||||||
if (player.hasPermission(Permission.PERMISSION_AREA_INFO_FORCE) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_AREA_INFO_FORCE) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlayerManager;
|
import com.plotsquared.core.util.PlayerManager;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.WorldUtil;
|
import com.plotsquared.core.util.WorldUtil;
|
||||||
@ -71,7 +72,8 @@ public class Kick extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if ((!plot.hasOwner() || !plot.isOwner(player.getUUID())) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_KICK)) {
|
if ((!plot.hasOwner() || !plot.isOwner(player.getUUID())) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_KICK)) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -89,7 +91,8 @@ public class Kick extends SubCommand {
|
|||||||
for (UUID uuid : uuids) {
|
for (UUID uuid : uuids) {
|
||||||
if (uuid == DBFunc.EVERYONE) {
|
if (uuid == DBFunc.EVERYONE) {
|
||||||
for (PlotPlayer<?> pp : plot.getPlayersInPlot()) {
|
for (PlotPlayer<?> pp : plot.getPlayersInPlot()) {
|
||||||
if (pp == player || pp.hasPermission(Permission.PERMISSION_ADMIN_ENTRY_DENIED)) {
|
if (pp == player || Permissions
|
||||||
|
.hasPermission(pp, Permission.PERMISSION_ADMIN_ENTRY_DENIED)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
players.add(pp);
|
players.add(pp);
|
||||||
@ -112,15 +115,15 @@ public class Kick extends SubCommand {
|
|||||||
for (PlotPlayer<?> player2 : players) {
|
for (PlotPlayer<?> player2 : players) {
|
||||||
if (!plot.equals(player2.getCurrentPlot())) {
|
if (!plot.equals(player2.getCurrentPlot())) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("kick.player_not_in_plot"),
|
TranslatableCaption.of("errors.invalid_player"),
|
||||||
TagResolver.resolver("player", Tag.inserting(Component.text(player2.getName())))
|
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (player2.hasPermission(Permission.PERMISSION_ADMIN_ENTRY_DENIED)) {
|
if (Permissions.hasPermission(player2, Permission.PERMISSION_ADMIN_ENTRY_DENIED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("kick.cannot_kick_player"),
|
TranslatableCaption.of("cluster.cannot_kick_player"),
|
||||||
TagResolver.resolver("player", Tag.inserting(Component.text(player2.getName())))
|
TagResolver.resolver("name", Tag.inserting(Component.text(player2.getName())))
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.Rating;
|
import com.plotsquared.core.plot.Rating;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
@ -122,7 +123,8 @@ public class Like extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS, true)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS, true)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
plot.clearRatings();
|
plot.clearRatings();
|
||||||
@ -204,7 +206,7 @@ public class Like extends SubCommand {
|
|||||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS)) {
|
||||||
completions.add("purge");
|
completions.add("purge");
|
||||||
}
|
}
|
||||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||||
@ -212,7 +214,7 @@ public class Like extends SubCommand {
|
|||||||
.startsWith(args[0].toLowerCase()))
|
.startsWith(args[0].toLowerCase()))
|
||||||
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.INFO) {
|
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.INFO) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
if (player.hasPermission(Permission.PERMISSION_RATE) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_RATE) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
|
@ -29,12 +29,14 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
|
import com.plotsquared.core.plot.expiration.ExpireManager;
|
||||||
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.PriceFlag;
|
import com.plotsquared.core.plot.flag.implementations.PriceFlag;
|
||||||
import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag;
|
import com.plotsquared.core.plot.flag.implementations.ServerPlotFlag;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
import com.plotsquared.core.util.EconHandler;
|
import com.plotsquared.core.util.EconHandler;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlayerManager;
|
import com.plotsquared.core.util.PlayerManager;
|
||||||
import com.plotsquared.core.util.StringComparison;
|
import com.plotsquared.core.util.StringComparison;
|
||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
@ -81,40 +83,40 @@ public class ListCmd extends SubCommand {
|
|||||||
|
|
||||||
private String[] getArgumentList(PlotPlayer<?> player) {
|
private String[] getArgumentList(PlotPlayer<?> player) {
|
||||||
List<String> args = new ArrayList<>();
|
List<String> args = new ArrayList<>();
|
||||||
if (this.econHandler != null && player.hasPermission(Permission.PERMISSION_LIST_FOR_SALE)) {
|
if (this.econHandler != null && Permissions.hasPermission(player, Permission.PERMISSION_LIST_FOR_SALE)) {
|
||||||
args.add("forsale");
|
args.add("forsale");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_MINE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_MINE)) {
|
||||||
args.add("mine");
|
args.add("mine");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_SHARED)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_SHARED)) {
|
||||||
args.add("shared");
|
args.add("shared");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_WORLD)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_WORLD)) {
|
||||||
args.add("world");
|
args.add("world");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_TOP)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_TOP)) {
|
||||||
args.add("top");
|
args.add("top");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_ALL)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_ALL)) {
|
||||||
args.add("all");
|
args.add("all");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_UNOWNED)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_UNOWNED)) {
|
||||||
args.add("unowned");
|
args.add("unowned");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_PLAYER)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_PLAYER)) {
|
||||||
args.add("<player>");
|
args.add("<player>");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_WORLD)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_WORLD)) {
|
||||||
args.add("<world>");
|
args.add("<world>");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_DONE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_DONE)) {
|
||||||
args.add("done");
|
args.add("done");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_EXPIRED)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_EXPIRED)) {
|
||||||
args.add("expired");
|
args.add("expired");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_FUZZY)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_FUZZY)) {
|
||||||
args.add("fuzzy <search...>");
|
args.add("fuzzy <search...>");
|
||||||
}
|
}
|
||||||
return args.toArray(new String[args.size()]);
|
return args.toArray(new String[args.size()]);
|
||||||
@ -191,7 +193,7 @@ public class ListCmd extends SubCommand {
|
|||||||
|
|
||||||
switch (arg) {
|
switch (arg) {
|
||||||
case "mine" -> {
|
case "mine" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_MINE)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_MINE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.mine")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.mine")))
|
||||||
@ -206,7 +208,7 @@ public class ListCmd extends SubCommand {
|
|||||||
.withSortingStrategy(SortingStrategy.SORT_BY_TEMP));
|
.withSortingStrategy(SortingStrategy.SORT_BY_TEMP));
|
||||||
}
|
}
|
||||||
case "shared" -> {
|
case "shared" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_SHARED)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_SHARED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.shared")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.shared")))
|
||||||
@ -219,14 +221,14 @@ public class ListCmd extends SubCommand {
|
|||||||
.thatPasses(plot -> !plot.isOwnerAbs(player.getUUID())));
|
.thatPasses(plot -> !plot.isOwnerAbs(player.getUUID())));
|
||||||
}
|
}
|
||||||
case "world" -> {
|
case "world" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_WORLD)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_WORLD)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!player.hasPermission("plots.list.world." + world)) {
|
if (!Permissions.hasPermission(player, "plots.list.world." + world)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
|
||||||
@ -236,28 +238,28 @@ public class ListCmd extends SubCommand {
|
|||||||
plotConsumer.accept(PlotQuery.newQuery().inWorld(world));
|
plotConsumer.accept(PlotQuery.newQuery().inWorld(world));
|
||||||
}
|
}
|
||||||
case "expired" -> {
|
case "expired" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_EXPIRED)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_EXPIRED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.expired")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.expired")))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (PlotSquared.platform().expireManager() == null) {
|
if (ExpireManager.IMP == null) {
|
||||||
plotConsumer.accept(PlotQuery.newQuery().noPlots());
|
plotConsumer.accept(PlotQuery.newQuery().noPlots());
|
||||||
} else {
|
} else {
|
||||||
plotConsumer.accept(PlotQuery.newQuery().expiredPlots());
|
plotConsumer.accept(PlotQuery.newQuery().expiredPlots());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "area" -> {
|
case "area" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_AREA)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_AREA)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.area")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.area")))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!player.hasPermission("plots.list.world." + world)) {
|
if (!Permissions.hasPermission(player, "plots.list.world." + world)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + world)))
|
||||||
@ -271,7 +273,7 @@ public class ListCmd extends SubCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "all" -> {
|
case "all" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_ALL)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_ALL)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.all")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.all")))
|
||||||
@ -281,7 +283,7 @@ public class ListCmd extends SubCommand {
|
|||||||
plotConsumer.accept(PlotQuery.newQuery().allPlots());
|
plotConsumer.accept(PlotQuery.newQuery().allPlots());
|
||||||
}
|
}
|
||||||
case "done" -> {
|
case "done" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_DONE)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_DONE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.done")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.done")))
|
||||||
@ -296,7 +298,7 @@ public class ListCmd extends SubCommand {
|
|||||||
.withSortingStrategy(SortingStrategy.SORT_BY_DONE));
|
.withSortingStrategy(SortingStrategy.SORT_BY_DONE));
|
||||||
}
|
}
|
||||||
case "top" -> {
|
case "top" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_TOP)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_TOP)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.top")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.top")))
|
||||||
@ -307,7 +309,7 @@ public class ListCmd extends SubCommand {
|
|||||||
plotConsumer.accept(PlotQuery.newQuery().allPlots().withSortingStrategy(SortingStrategy.SORT_BY_RATING));
|
plotConsumer.accept(PlotQuery.newQuery().allPlots().withSortingStrategy(SortingStrategy.SORT_BY_RATING));
|
||||||
}
|
}
|
||||||
case "forsale" -> {
|
case "forsale" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_FOR_SALE)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_FOR_SALE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.forsale")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.forsale")))
|
||||||
@ -320,7 +322,7 @@ public class ListCmd extends SubCommand {
|
|||||||
plotConsumer.accept(PlotQuery.newQuery().allPlots().thatPasses(plot -> plot.getFlag(PriceFlag.class) > 0));
|
plotConsumer.accept(PlotQuery.newQuery().allPlots().thatPasses(plot -> plot.getFlag(PriceFlag.class) > 0));
|
||||||
}
|
}
|
||||||
case "unowned" -> {
|
case "unowned" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_UNOWNED)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_UNOWNED)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.unowned")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.unowned")))
|
||||||
@ -330,7 +332,7 @@ public class ListCmd extends SubCommand {
|
|||||||
plotConsumer.accept(PlotQuery.newQuery().allPlots().thatPasses(plot -> plot.getOwner() == null));
|
plotConsumer.accept(PlotQuery.newQuery().allPlots().thatPasses(plot -> plot.getOwner() == null));
|
||||||
}
|
}
|
||||||
case "fuzzy" -> {
|
case "fuzzy" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_FUZZY)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_FUZZY)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.fuzzy")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.fuzzy")))
|
||||||
@ -355,14 +357,14 @@ public class ListCmd extends SubCommand {
|
|||||||
}
|
}
|
||||||
default -> {
|
default -> {
|
||||||
if (this.plotAreaManager.hasPlotArea(args[0])) {
|
if (this.plotAreaManager.hasPlotArea(args[0])) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_WORLD)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_WORLD)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world")))
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!player.hasPermission("plots.list.world." + args[0])) {
|
if (!Permissions.hasPermission(player, "plots.list.world." + args[0])) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + args[0])))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.world." + args[0])))
|
||||||
@ -389,7 +391,7 @@ public class ListCmd extends SubCommand {
|
|||||||
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
TagResolver.resolver("value", Tag.inserting(Component.text(args[0])))
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_LIST_PLAYER)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_LIST_PLAYER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.player")))
|
TagResolver.resolver("node", Tag.inserting(Component.text("plots.list.player")))
|
||||||
@ -474,20 +476,20 @@ public class ListCmd extends SubCommand {
|
|||||||
final List<UUIDMapping> names = PlotSquared.get().getImpromptuUUIDPipeline().getNames(plot.getOwners())
|
final List<UUIDMapping> names = PlotSquared.get().getImpromptuUUIDPipeline().getNames(plot.getOwners())
|
||||||
.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS);
|
.get(Settings.UUID.BLOCKING_TIMEOUT, TimeUnit.MILLISECONDS);
|
||||||
for (final UUIDMapping uuidMapping : names) {
|
for (final UUIDMapping uuidMapping : names) {
|
||||||
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuidMapping.uuid());
|
PlotPlayer<?> pp = PlotSquared.platform().playerManager().getPlayerIfExists(uuidMapping.getUuid());
|
||||||
TagResolver resolver = TagResolver.builder()
|
TagResolver resolver = TagResolver.builder()
|
||||||
.tag("prefix", Tag.inserting(Component.text(prefix)))
|
.tag("prefix", Tag.inserting(Component.text(prefix)))
|
||||||
.tag("player", Tag.inserting(Component.text(uuidMapping.username())))
|
.tag("player", Tag.inserting(Component.text(uuidMapping.getUsername())))
|
||||||
.build();
|
.build();
|
||||||
if (pp != null) {
|
if (pp != null) {
|
||||||
builder.append(MINI_MESSAGE.deserialize(online, resolver));
|
builder.append(MINI_MESSAGE.deserialize(online, resolver));
|
||||||
} else if (uuidMapping.username().equalsIgnoreCase("unknown")) {
|
} else if (uuidMapping.getUsername().equalsIgnoreCase("unknown")) {
|
||||||
TagResolver unknownResolver = TagResolver.resolver(
|
TagResolver unknownResolver = TagResolver.resolver(
|
||||||
"info.unknown",
|
"info.unknown",
|
||||||
Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player))
|
Tag.inserting(TranslatableCaption.of("info.unknown").toComponent(player))
|
||||||
);
|
);
|
||||||
builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver));
|
builder.append(MINI_MESSAGE.deserialize(unknown, unknownResolver));
|
||||||
} else if (uuidMapping.uuid().equals(DBFunc.EVERYONE)) {
|
} else if (uuidMapping.getUuid().equals(DBFunc.EVERYONE)) {
|
||||||
TagResolver everyoneResolver = TagResolver.resolver(
|
TagResolver everyoneResolver = TagResolver.resolver(
|
||||||
"info.everyone",
|
"info.everyone",
|
||||||
Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player))
|
Tag.inserting(TranslatableCaption.of("info.everyone").toComponent(player))
|
||||||
@ -526,31 +528,31 @@ public class ListCmd extends SubCommand {
|
|||||||
@Override
|
@Override
|
||||||
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
public Collection<Command> tab(PlotPlayer<?> player, String[] args, boolean space) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (this.econHandler.isSupported() && player.hasPermission(Permission.PERMISSION_LIST_FOR_SALE)) {
|
if (this.econHandler.isSupported() && Permissions.hasPermission(player, Permission.PERMISSION_LIST_FOR_SALE)) {
|
||||||
completions.add("forsale");
|
completions.add("forsale");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_MINE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_MINE)) {
|
||||||
completions.add("mine");
|
completions.add("mine");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_SHARED)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_SHARED)) {
|
||||||
completions.add("shared");
|
completions.add("shared");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_WORLD)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_WORLD)) {
|
||||||
completions.addAll(PlotSquared.platform().worldManager().getWorlds());
|
completions.addAll(PlotSquared.platform().worldManager().getWorlds());
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_TOP)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_TOP)) {
|
||||||
completions.add("top");
|
completions.add("top");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_ALL)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_ALL)) {
|
||||||
completions.add("all");
|
completions.add("all");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_UNOWNED)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_UNOWNED)) {
|
||||||
completions.add("unowned");
|
completions.add("unowned");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_DONE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_DONE)) {
|
||||||
completions.add("done");
|
completions.add("done");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_EXPIRED)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_EXPIRED)) {
|
||||||
completions.add("expired");
|
completions.add("expired");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -560,7 +562,7 @@ public class ListCmd extends SubCommand {
|
|||||||
.map(completion -> new Command(null, true, completion, "", RequiredType.NONE, CommandCategory.TELEPORT) {
|
.map(completion -> new Command(null, true, completion, "", RequiredType.NONE, CommandCategory.TELEPORT) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
|
|
||||||
if (player.hasPermission(Permission.PERMISSION_LIST_PLAYER) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_LIST_PLAYER) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ import com.plotsquared.core.plot.PlotArea;
|
|||||||
import com.plotsquared.core.plot.PlotId;
|
import com.plotsquared.core.plot.PlotId;
|
||||||
import com.plotsquared.core.plot.schematic.Schematic;
|
import com.plotsquared.core.plot.schematic.Schematic;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.SchematicHandler;
|
import com.plotsquared.core.util.SchematicHandler;
|
||||||
import com.plotsquared.core.util.TimeUtil;
|
import com.plotsquared.core.util.TimeUtil;
|
||||||
import com.plotsquared.core.util.task.RunnableVal;
|
import com.plotsquared.core.util.task.RunnableVal;
|
||||||
@ -41,7 +42,6 @@ import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
|||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -82,7 +82,8 @@ public class Load extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_LOAD)) {
|
if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_LOAD)) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -117,7 +118,7 @@ public class Load extends SubCommand {
|
|||||||
}
|
}
|
||||||
final URL url;
|
final URL url;
|
||||||
try {
|
try {
|
||||||
url = URI.create(Settings.Web.URL + "saves/" + player.getUUID() + '/' + schematic).toURL();
|
url = new URL(Settings.Web.URL + "saves/" + player.getUUID() + '/' + schematic);
|
||||||
} catch (MalformedURLException e) {
|
} catch (MalformedURLException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
player.sendMessage(TranslatableCaption.of("web.load_failed"));
|
player.sendMessage(TranslatableCaption.of("web.load_failed"));
|
||||||
|
@ -32,6 +32,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.world.SinglePlotArea;
|
import com.plotsquared.core.plot.world.SinglePlotArea;
|
||||||
import com.plotsquared.core.util.EconHandler;
|
import com.plotsquared.core.util.EconHandler;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlotExpression;
|
import com.plotsquared.core.util.PlotExpression;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
@ -183,7 +184,7 @@ public class MainCommand extends Command {
|
|||||||
if (cmd.hasConfirmation(player)) {
|
if (cmd.hasConfirmation(player)) {
|
||||||
CmdConfirm.addPending(player, cmd.getUsage(), () -> {
|
CmdConfirm.addPending(player, cmd.getUsage(), () -> {
|
||||||
PlotArea area = player.getApplicablePlotArea();
|
PlotArea area = player.getApplicablePlotArea();
|
||||||
if (area != null && econHandler.isEnabled(area) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) {
|
if (area != null && econHandler.isEnabled(area)) {
|
||||||
PlotExpression priceEval =
|
PlotExpression priceEval =
|
||||||
area.getPrices().get(cmd.getFullId());
|
area.getPrices().get(cmd.getFullId());
|
||||||
double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
|
double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
|
||||||
@ -201,7 +202,7 @@ public class MainCommand extends Command {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlotArea area = player.getApplicablePlotArea();
|
PlotArea area = player.getApplicablePlotArea();
|
||||||
if (area != null && econHandler.isEnabled(area) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON)) {
|
if (area != null && econHandler.isEnabled(area)) {
|
||||||
PlotExpression priceEval = area.getPrices().get(cmd.getFullId());
|
PlotExpression priceEval = area.getPrices().get(cmd.getFullId());
|
||||||
double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
|
double price = priceEval != null ? priceEval.evaluate(0d) : 0d;
|
||||||
if (price != 0d && econHandler.getMoney(player) < price) {
|
if (price != 0d && econHandler.getMoney(player) < price) {
|
||||||
@ -244,8 +245,8 @@ public class MainCommand extends Command {
|
|||||||
PlotArea area = player.getApplicablePlotArea();
|
PlotArea area = player.getApplicablePlotArea();
|
||||||
Plot newPlot = Plot.fromString(area, args[0]);
|
Plot newPlot = Plot.fromString(area, args[0]);
|
||||||
if (newPlot != null && (player instanceof ConsolePlayer || newPlot.getArea()
|
if (newPlot != null && (player instanceof ConsolePlayer || newPlot.getArea()
|
||||||
.equals(area) || player.hasPermission(Permission.PERMISSION_ADMIN)
|
.equals(area) || Permissions.hasPermission(player, Permission.PERMISSION_ADMIN)
|
||||||
|| player.hasPermission(Permission.PERMISSION_ADMIN_AREA_SUDO))
|
|| Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_AREA_SUDO))
|
||||||
&& !newPlot.isDenied(player.getUUID())) {
|
&& !newPlot.isDenied(player.getUUID())) {
|
||||||
final Location newLoc;
|
final Location newLoc;
|
||||||
if (newPlot.getArea() instanceof SinglePlotArea) {
|
if (newPlot.getArea() instanceof SinglePlotArea) {
|
||||||
|
@ -32,6 +32,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.util.EconHandler;
|
import com.plotsquared.core.util.EconHandler;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlotExpression;
|
import com.plotsquared.core.util.PlotExpression;
|
||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -109,7 +110,7 @@ public class Merge extends SubCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (direction == null && (args[0].equalsIgnoreCase("all") || args[0]
|
if (direction == null && (args[0].equalsIgnoreCase("all") || args[0]
|
||||||
.equalsIgnoreCase("auto")) && player.hasPermission(Permission.PERMISSION_MERGE_ALL)) {
|
.equalsIgnoreCase("auto"))) {
|
||||||
direction = Direction.ALL;
|
direction = Direction.ALL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -127,7 +128,7 @@ public class Merge extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
final int size = plot.getConnectedPlots().size();
|
final int size = plot.getConnectedPlots().size();
|
||||||
int max = player.hasPermissionRange("plots.merge", Settings.Limit.MAX_PLOTS);
|
int max = Permissions.hasPermissionRange(player, "plots.merge", Settings.Limit.MAX_PLOTS);
|
||||||
PlotMergeEvent event =
|
PlotMergeEvent event =
|
||||||
this.eventDispatcher.callMerge(plot, direction, max, player);
|
this.eventDispatcher.callMerge(plot, direction, max, player);
|
||||||
if (event.getEventResult() == Result.DENY) {
|
if (event.getEventResult() == Result.DENY) {
|
||||||
@ -155,7 +156,7 @@ public class Merge extends SubCommand {
|
|||||||
UUID uuid = player.getUUID();
|
UUID uuid = player.getUUID();
|
||||||
|
|
||||||
if (!force && !plot.isOwner(uuid)) {
|
if (!force && !plot.isOwner(uuid)) {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_MERGE)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_MERGE)) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
@ -167,7 +168,8 @@ public class Merge extends SubCommand {
|
|||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
terrain = "true".equalsIgnoreCase(args[1]);
|
terrain = "true".equalsIgnoreCase(args[1]);
|
||||||
}
|
}
|
||||||
if (!force && !terrain && !player.hasPermission(Permission.PERMISSION_MERGE_KEEP_ROAD)) {
|
if (!force && !terrain && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_MERGE_KEEP_ROAD)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -178,7 +180,7 @@ public class Merge extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (plot.getPlotModificationManager().autoMerge(Direction.ALL, maxSize, uuid, player, terrain)) {
|
if (plot.getPlotModificationManager().autoMerge(Direction.ALL, maxSize, uuid, player, terrain)) {
|
||||||
if (this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d) {
|
if (this.econHandler.isEnabled(plotArea) && price > 0d) {
|
||||||
this.econHandler.withdrawMoney(player, price);
|
this.econHandler.withdrawMoney(player, price);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_balance"),
|
TranslatableCaption.of("economy.removed_balance"),
|
||||||
@ -196,8 +198,8 @@ public class Merge extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("merge.no_available_automerge"));
|
player.sendMessage(TranslatableCaption.of("merge.no_available_automerge"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!force && this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d && this.econHandler.getMoney(
|
if (!force && this.econHandler.isEnabled(plotArea) && price > 0d
|
||||||
player) < price) {
|
&& this.econHandler.getMoney(player) < price) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.cannot_afford_merge"),
|
TranslatableCaption.of("economy.cannot_afford_merge"),
|
||||||
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
|
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
|
||||||
@ -210,7 +212,8 @@ public class Merge extends SubCommand {
|
|||||||
} else {
|
} else {
|
||||||
terrain = true;
|
terrain = true;
|
||||||
}
|
}
|
||||||
if (!force && !terrain && !player.hasPermission(Permission.PERMISSION_MERGE_KEEP_ROAD)) {
|
if (!force && !terrain && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_MERGE_KEEP_ROAD)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_MERGE_KEEP_ROAD))
|
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_MERGE_KEEP_ROAD))
|
||||||
@ -218,7 +221,7 @@ public class Merge extends SubCommand {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (plot.getPlotModificationManager().autoMerge(direction, maxSize - size, uuid, player, terrain)) {
|
if (plot.getPlotModificationManager().autoMerge(direction, maxSize - size, uuid, player, terrain)) {
|
||||||
if (this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d) {
|
if (this.econHandler.isEnabled(plotArea) && price > 0d) {
|
||||||
this.econHandler.withdrawMoney(player, price);
|
this.econHandler.withdrawMoney(player, price);
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.removed_balance"),
|
TranslatableCaption.of("economy.removed_balance"),
|
||||||
@ -235,7 +238,7 @@ public class Merge extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("merge.no_available_automerge"));
|
player.sendMessage(TranslatableCaption.of("merge.no_available_automerge"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!force && !player.hasPermission(Permission.PERMISSION_MERGE_OTHER)) {
|
if (!force && !Permissions.hasPermission(player, Permission.PERMISSION_MERGE_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_MERGE_OTHER))
|
TagResolver.resolver("node", Tag.inserting(Permission.PERMISSION_MERGE_OTHER))
|
||||||
@ -259,7 +262,7 @@ public class Merge extends SubCommand {
|
|||||||
accepter.sendMessage(TranslatableCaption.of("merge.merge_not_valid"));
|
accepter.sendMessage(TranslatableCaption.of("merge.merge_not_valid"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d) {
|
if (this.econHandler.isEnabled(plotArea) && price > 0d) {
|
||||||
if (!force && this.econHandler.getMoney(player) < price) {
|
if (!force && this.econHandler.getMoney(player) < price) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("economy.cannot_afford_merge"),
|
TranslatableCaption.of("economy.cannot_afford_merge"),
|
||||||
@ -294,34 +297,7 @@ public class Merge extends SubCommand {
|
|||||||
run.run();
|
run.run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (force || !isOnline) {
|
if (!force && !isOnline) {
|
||||||
if (force || player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_MERGE_OTHER_OFFLINE)) {
|
|
||||||
if (plot.getPlotModificationManager().autoMerge(
|
|
||||||
direction,
|
|
||||||
maxSize - size,
|
|
||||||
uuids.iterator().next(),
|
|
||||||
player,
|
|
||||||
terrain
|
|
||||||
)) {
|
|
||||||
if (this.econHandler.isEnabled(plotArea) && !player.hasPermission(Permission.PERMISSION_ADMIN_BYPASS_ECON) && price > 0d) {
|
|
||||||
if (!force && this.econHandler.getMoney(player) < price) {
|
|
||||||
player.sendMessage(
|
|
||||||
TranslatableCaption.of("economy.cannot_afford_merge"),
|
|
||||||
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
this.econHandler.withdrawMoney(player, price);
|
|
||||||
player.sendMessage(
|
|
||||||
TranslatableCaption.of("economy.removed_balance"),
|
|
||||||
TagResolver.resolver("money", Tag.inserting(Component.text(this.econHandler.format(price))))
|
|
||||||
);
|
|
||||||
}
|
|
||||||
player.sendMessage(TranslatableCaption.of("merge.success_merge"));
|
|
||||||
eventDispatcher.callPostMerge(player, plot);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
player.sendMessage(TranslatableCaption.of("merge.no_available_automerge"));
|
player.sendMessage(TranslatableCaption.of("merge.no_available_automerge"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@ import com.plotsquared.core.player.PlotPlayer;
|
|||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.task.RunnableVal2;
|
import com.plotsquared.core.util.task.RunnableVal2;
|
||||||
import com.plotsquared.core.util.task.RunnableVal3;
|
import com.plotsquared.core.util.task.RunnableVal3;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -61,7 +62,8 @@ public class Move extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
if (!plot1.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN)) {
|
if (!plot1.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN)) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
@ -88,7 +90,8 @@ public class Move extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("invalid.origin_cant_be_target"));
|
player.sendMessage(TranslatableCaption.of("invalid.origin_cant_be_target"));
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
if (!plot1.getArea().isCompatible(plot2.getArea()) && (!override || !player.hasPermission(Permission.PERMISSION_ADMIN))) {
|
if (!plot1.getArea().isCompatible(plot2.getArea()) && (!override || !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN))) {
|
||||||
player.sendMessage(TranslatableCaption.of("errors.plotworld_incompatible"));
|
player.sendMessage(TranslatableCaption.of("errors.plotworld_incompatible"));
|
||||||
return CompletableFuture.completedFuture(false);
|
return CompletableFuture.completedFuture(false);
|
||||||
}
|
}
|
||||||
|
@ -33,6 +33,7 @@ import com.plotsquared.core.plot.flag.PlotFlag;
|
|||||||
import com.plotsquared.core.plot.flag.implementations.MusicFlag;
|
import com.plotsquared.core.plot.flag.implementations.MusicFlag;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.InventoryUtil;
|
import com.plotsquared.core.util.InventoryUtil;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.sk89q.worldedit.world.item.ItemType;
|
import com.sk89q.worldedit.world.item.ItemType;
|
||||||
import com.sk89q.worldedit.world.item.ItemTypes;
|
import com.sk89q.worldedit.world.item.ItemTypes;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -56,7 +57,7 @@ public class Music extends SubCommand {
|
|||||||
.asList("music_disc_13", "music_disc_cat", "music_disc_blocks", "music_disc_chirp",
|
.asList("music_disc_13", "music_disc_cat", "music_disc_blocks", "music_disc_chirp",
|
||||||
"music_disc_far", "music_disc_mall", "music_disc_mellohi", "music_disc_stal",
|
"music_disc_far", "music_disc_mall", "music_disc_mellohi", "music_disc_stal",
|
||||||
"music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait", "music_disc_otherside",
|
"music_disc_strad", "music_disc_ward", "music_disc_11", "music_disc_wait", "music_disc_otherside",
|
||||||
"music_disc_pigstep", "music_disc_5", "music_disc_relic"
|
"music_disc_pigstep", "music_disc_5"
|
||||||
);
|
);
|
||||||
|
|
||||||
private final InventoryUtil inventoryUtil;
|
private final InventoryUtil inventoryUtil;
|
||||||
@ -80,7 +81,8 @@ public class Music extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isAdded(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_MUSIC_OTHER)) {
|
if (!plot.isAdded(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_MUSIC_OTHER)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
|
@ -28,7 +28,6 @@ import net.kyori.adventure.text.Component;
|
|||||||
import net.kyori.adventure.text.minimessage.tag.Tag;
|
import net.kyori.adventure.text.minimessage.tag.Tag;
|
||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
@CommandDeclaration(command = "near",
|
@CommandDeclaration(command = "near",
|
||||||
@ -56,8 +55,4 @@ public class Near extends Command {
|
|||||||
return CompletableFuture.completedFuture(true);
|
return CompletableFuture.completedFuture(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<PlotPlayer<?>> getPlayersInPlotVisible(Plot plot, PlotPlayer<?> executor) {
|
|
||||||
return plot.getPlayersInPlot().stream().filter(executor::canSee).toList();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -31,6 +31,7 @@ import com.plotsquared.core.player.PlayerMetaDataKeys;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlayerManager;
|
import com.plotsquared.core.util.PlayerManager;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
@ -100,8 +101,8 @@ public class Owner extends SetCommand {
|
|||||||
uuid = event.getNewOwner();
|
uuid = event.getNewOwner();
|
||||||
boolean force = event.getEventResult() == Result.FORCE;
|
boolean force = event.getEventResult() == Result.FORCE;
|
||||||
if (uuid == null) {
|
if (uuid == null) {
|
||||||
if (!force && !player.hasPermission(
|
if (!force && !Permissions
|
||||||
Permission.PERMISSION_ADMIN_COMMAND_SET_OWNER,
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_SET_OWNER,
|
||||||
true
|
true
|
||||||
)) {
|
)) {
|
||||||
return;
|
return;
|
||||||
@ -143,7 +144,8 @@ public class Owner extends SetCommand {
|
|||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!force && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_SET_OWNER)) {
|
if (!force && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_SET_OWNER)) {
|
||||||
if (other == null) {
|
if (other == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("errors.invalid_player_offline"),
|
TranslatableCaption.of("errors.invalid_player_offline"),
|
||||||
|
@ -46,7 +46,7 @@ public class PluginCmd extends SubCommand {
|
|||||||
player.sendMessage(StaticCaption.of(
|
player.sendMessage(StaticCaption.of(
|
||||||
"<gray>>> </gray><gold><bold>Authors<reset><gray>: </gray><gold>Citymonstret </gold><gray>& </gray><gold>Empire92 </gold><gray>& </gray><gold>MattBDev </gold><gray>& </gray><gold>dordsor21 </gold><gray>& </gray><gold>NotMyFault </gold><gray>& </gray><gold>SirYwell</gold>"));
|
"<gray>>> </gray><gold><bold>Authors<reset><gray>: </gray><gold>Citymonstret </gold><gray>& </gray><gold>Empire92 </gold><gray>& </gray><gold>MattBDev </gold><gray>& </gray><gold>dordsor21 </gold><gray>& </gray><gold>NotMyFault </gold><gray>& </gray><gold>SirYwell</gold>"));
|
||||||
player.sendMessage(StaticCaption.of(
|
player.sendMessage(StaticCaption.of(
|
||||||
"<gray>>> </gray><gold><bold>Wiki<reset><gray>: </gray><gold><click:open_url:https://intellectualsites.gitbook.io/plotsquared/>https://intellectualsites.gitbook.io/plotsquared/</gold>"));
|
"<gray>>> </gray><gold><bold>Wiki<reset><gray>: </gray><gold><click:open_url:https://intellectualsites.github.io/plotsquared-documentation/>https://intellectualsites.github.io/plotsquared-documentation/</gold>"));
|
||||||
player.sendMessage(StaticCaption.of(
|
player.sendMessage(StaticCaption.of(
|
||||||
"<gray>>> </gray><gold><bold>Discord<reset><gray>: </gray><gold><click:open_url:https://discord.gg/intellectualsites>https://discord.gg/intellectualsites</gold>"));
|
"<gray>>> </gray><gold><bold>Discord<reset><gray>: </gray><gold><click:open_url:https://discord.gg/intellectualsites>https://discord.gg/intellectualsites</gold>"));
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
|
@ -90,8 +90,12 @@ public class Purge extends SubCommand {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
switch (split[0].toLowerCase()) {
|
switch (split[0].toLowerCase()) {
|
||||||
case "world", "w" -> world = split[1];
|
case "world":
|
||||||
case "area", "a" -> {
|
case "w":
|
||||||
|
world = split[1];
|
||||||
|
break;
|
||||||
|
case "area":
|
||||||
|
case "a":
|
||||||
area = this.plotAreaManager.getPlotAreaByString(split[1]);
|
area = this.plotAreaManager.getPlotAreaByString(split[1]);
|
||||||
if (area == null) {
|
if (area == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -100,8 +104,9 @@ public class Purge extends SubCommand {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "plotid", "id" -> {
|
case "plotid":
|
||||||
|
case "id":
|
||||||
try {
|
try {
|
||||||
id = PlotId.fromString(split[1]);
|
id = PlotId.fromString(split[1]);
|
||||||
} catch (IllegalArgumentException ignored) {
|
} catch (IllegalArgumentException ignored) {
|
||||||
@ -111,8 +116,9 @@ public class Purge extends SubCommand {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
case "owner", "o" -> {
|
case "owner":
|
||||||
|
case "o":
|
||||||
UUIDMapping ownerMapping = PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(split[1]);
|
UUIDMapping ownerMapping = PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(split[1]);
|
||||||
if (ownerMapping == null) {
|
if (ownerMapping == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -121,9 +127,10 @@ public class Purge extends SubCommand {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
owner = ownerMapping.uuid();
|
owner = ownerMapping.getUuid();
|
||||||
}
|
break;
|
||||||
case "shared", "s" -> {
|
case "shared":
|
||||||
|
case "s":
|
||||||
UUIDMapping addedMapping = PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(split[1]);
|
UUIDMapping addedMapping = PlotSquared.get().getImpromptuUUIDPipeline().getImmediately(split[1]);
|
||||||
if (addedMapping == null) {
|
if (addedMapping == null) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
@ -132,16 +139,25 @@ public class Purge extends SubCommand {
|
|||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
added = addedMapping.uuid();
|
added = addedMapping.getUuid();
|
||||||
}
|
break;
|
||||||
case "clear", "c", "delete", "d", "del" -> clear = Boolean.parseBoolean(split[1]);
|
case "clear":
|
||||||
case "unknown", "?", "u" -> unknown = Boolean.parseBoolean(split[1]);
|
case "c":
|
||||||
default -> {
|
case "delete":
|
||||||
|
case "d":
|
||||||
|
case "del":
|
||||||
|
clear = Boolean.parseBoolean(split[1]);
|
||||||
|
break;
|
||||||
|
case "unknown":
|
||||||
|
case "?":
|
||||||
|
case "u":
|
||||||
|
unknown = Boolean.parseBoolean(split[1]);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
sendUsage(player);
|
sendUsage(player);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
final HashSet<Plot> toDelete = new HashSet<>();
|
final HashSet<Plot> toDelete = new HashSet<>();
|
||||||
for (Plot plot : PlotQuery.newQuery().whereBasePlot()) {
|
for (Plot plot : PlotQuery.newQuery().whereBasePlot()) {
|
||||||
if (world != null && !plot.getWorldName().equalsIgnoreCase(world)) {
|
if (world != null && !plot.getWorldName().equalsIgnoreCase(world)) {
|
||||||
@ -220,9 +236,9 @@ public class Purge extends SubCommand {
|
|||||||
try {
|
try {
|
||||||
ids.add(plot.temp);
|
ids.add(plot.temp);
|
||||||
if (finalClear) {
|
if (finalClear) {
|
||||||
plot.getPlotModificationManager().clear(false, true, player,
|
plot.getPlotModificationManager().clear(false, true, player, () -> {
|
||||||
() -> LOGGER.info("Plot {} cleared by purge", plot.getId())
|
LOGGER.info("Plot {} cleared by purge", plot.getId());
|
||||||
);
|
});
|
||||||
} else {
|
} else {
|
||||||
plot.getPlotModificationManager().removeSign();
|
plot.getPlotModificationManager().removeSign();
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ import com.plotsquared.core.plot.flag.implementations.DoneFlag;
|
|||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
import com.plotsquared.core.util.InventoryUtil;
|
import com.plotsquared.core.util.InventoryUtil;
|
||||||
import com.plotsquared.core.util.MathMan;
|
import com.plotsquared.core.util.MathMan;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import com.plotsquared.core.util.query.PlotQuery;
|
import com.plotsquared.core.util.query.PlotQuery;
|
||||||
import com.plotsquared.core.util.task.TaskManager;
|
import com.plotsquared.core.util.task.TaskManager;
|
||||||
@ -115,7 +116,8 @@ public class Rate extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
player.sendMessage(TranslatableCaption.of("errors.not_in_plot"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS, true)) {
|
if (!Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS, true)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
plot.clearRatings();
|
plot.clearRatings();
|
||||||
@ -273,10 +275,10 @@ public class Rate extends SubCommand {
|
|||||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_RATE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_RATE)) {
|
||||||
completions.add("1 - 10");
|
completions.add("1 - 10");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_PURGE_RATINGS)) {
|
||||||
completions.add("purge");
|
completions.add("purge");
|
||||||
}
|
}
|
||||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||||
@ -284,7 +286,7 @@ public class Rate extends SubCommand {
|
|||||||
.startsWith(args[0].toLowerCase()))
|
.startsWith(args[0].toLowerCase()))
|
||||||
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.INFO) {
|
.map(completion -> new Command(null, true, completion, "", RequiredType.PLAYER, CommandCategory.INFO) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
if (player.hasPermission(Permission.PERMISSION_RATE) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_RATE) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
|
@ -26,6 +26,7 @@ import com.plotsquared.core.permissions.Permission;
|
|||||||
import com.plotsquared.core.player.PlotPlayer;
|
import com.plotsquared.core.player.PlotPlayer;
|
||||||
import com.plotsquared.core.plot.Plot;
|
import com.plotsquared.core.plot.Plot;
|
||||||
import com.plotsquared.core.util.EventDispatcher;
|
import com.plotsquared.core.util.EventDispatcher;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.PlayerManager;
|
import com.plotsquared.core.util.PlayerManager;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@ -66,7 +67,8 @@ public class Remove extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission(Permission.PERMISSION_ADMIN_COMMAND_REMOVE)) {
|
if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, Permission.PERMISSION_ADMIN_COMMAND_REMOVE)) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ import com.plotsquared.core.plot.Plot;
|
|||||||
import com.plotsquared.core.plot.PlotArea;
|
import com.plotsquared.core.plot.PlotArea;
|
||||||
import com.plotsquared.core.plot.schematic.Schematic;
|
import com.plotsquared.core.plot.schematic.Schematic;
|
||||||
import com.plotsquared.core.plot.world.PlotAreaManager;
|
import com.plotsquared.core.plot.world.PlotAreaManager;
|
||||||
|
import com.plotsquared.core.util.Permissions;
|
||||||
import com.plotsquared.core.util.SchematicHandler;
|
import com.plotsquared.core.util.SchematicHandler;
|
||||||
import com.plotsquared.core.util.StringMan;
|
import com.plotsquared.core.util.StringMan;
|
||||||
import com.plotsquared.core.util.TabCompletions;
|
import com.plotsquared.core.util.TabCompletions;
|
||||||
@ -40,7 +41,6 @@ import net.kyori.adventure.text.minimessage.tag.Tag;
|
|||||||
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
import net.kyori.adventure.text.minimessage.tag.resolver.TagResolver;
|
||||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||||
|
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
@ -82,7 +82,7 @@ public class SchematicCmd extends SubCommand {
|
|||||||
String arg = args[0].toLowerCase();
|
String arg = args[0].toLowerCase();
|
||||||
switch (arg) {
|
switch (arg) {
|
||||||
case "paste" -> {
|
case "paste" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_SCHEMATIC_PASTE)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_PASTE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -112,7 +112,8 @@ public class SchematicCmd extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
player.sendMessage(TranslatableCaption.of("info.plot_unowned"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission("plots.admin.command.schematic.paste")) {
|
if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, "plots.admin.command.schematic.paste")) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -131,7 +132,8 @@ public class SchematicCmd extends SubCommand {
|
|||||||
if (location.startsWith("url:")) {
|
if (location.startsWith("url:")) {
|
||||||
try {
|
try {
|
||||||
UUID uuid = UUID.fromString(location.substring(4));
|
UUID uuid = UUID.fromString(location.substring(4));
|
||||||
URL url = URI.create(Settings.Web.URL + "uploads/" + uuid + ".schematic").toURL();
|
URL base = new URL(Settings.Web.URL);
|
||||||
|
URL url = new URL(base, "uploads/" + uuid + ".schematic");
|
||||||
schematic = this.schematicHandler.getSchematic(url);
|
schematic = this.schematicHandler.getSchematic(url);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -233,7 +235,7 @@ public class SchematicCmd extends SubCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "export", "save" -> {
|
case "export", "save" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_SCHEMATIC_SAVE)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_SAVE)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -261,7 +263,8 @@ public class SchematicCmd extends SubCommand {
|
|||||||
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
player.sendMessage(TranslatableCaption.of("schematics.schematic_too_large"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (!plot.isOwner(player.getUUID()) && !player.hasPermission("plots.admin.command.schematic.save")) {
|
if (!plot.isOwner(player.getUUID()) && !Permissions
|
||||||
|
.hasPermission(player, "plots.admin.command.schematic.save")) {
|
||||||
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
player.sendMessage(TranslatableCaption.of("permission.no_plot_perms"));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -278,7 +281,7 @@ public class SchematicCmd extends SubCommand {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "list" -> {
|
case "list" -> {
|
||||||
if (!player.hasPermission(Permission.PERMISSION_SCHEMATIC_LIST)) {
|
if (!Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_LIST)) {
|
||||||
player.sendMessage(
|
player.sendMessage(
|
||||||
TranslatableCaption.of("permission.no_permission"),
|
TranslatableCaption.of("permission.no_permission"),
|
||||||
TagResolver.resolver(
|
TagResolver.resolver(
|
||||||
@ -306,13 +309,13 @@ public class SchematicCmd extends SubCommand {
|
|||||||
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
public Collection<Command> tab(final PlotPlayer<?> player, final String[] args, final boolean space) {
|
||||||
if (args.length == 1) {
|
if (args.length == 1) {
|
||||||
final List<String> completions = new LinkedList<>();
|
final List<String> completions = new LinkedList<>();
|
||||||
if (player.hasPermission(Permission.PERMISSION_SCHEMATIC_SAVE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_SAVE)) {
|
||||||
completions.add("save");
|
completions.add("save");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_SCHEMATIC_LIST)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_LIST)) {
|
||||||
completions.add("list");
|
completions.add("list");
|
||||||
}
|
}
|
||||||
if (player.hasPermission(Permission.PERMISSION_SCHEMATIC_PASTE)) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC_PASTE)) {
|
||||||
completions.add("paste");
|
completions.add("paste");
|
||||||
}
|
}
|
||||||
final List<Command> commands = completions.stream().filter(completion -> completion
|
final List<Command> commands = completions.stream().filter(completion -> completion
|
||||||
@ -327,7 +330,7 @@ public class SchematicCmd extends SubCommand {
|
|||||||
CommandCategory.ADMINISTRATION
|
CommandCategory.ADMINISTRATION
|
||||||
) {
|
) {
|
||||||
}).collect(Collectors.toCollection(LinkedList::new));
|
}).collect(Collectors.toCollection(LinkedList::new));
|
||||||
if (player.hasPermission(Permission.PERMISSION_SCHEMATIC) && args[0].length() > 0) {
|
if (Permissions.hasPermission(player, Permission.PERMISSION_SCHEMATIC) && args[0].length() > 0) {
|
||||||
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
commands.addAll(TabCompletions.completePlayers(player, args[0], Collections.emptyList()));
|
||||||
}
|
}
|
||||||
return commands;
|
return commands;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user