Use live TrueOG Network config files

This commit is contained in:
NotAlexNoyle committed 2026-01-03 07:24:36 -05:00
1 parent 4246516a26
commit 782cde0182
176 files changed
+10481 -3796

No files matched your search

+18 -4
View File
@@ -2,8 +2,8 @@
plugins {
id("java") // Import Java plugin.
id("java-library") // Import Java Library plugin.
id("com.diffplug.spotless") version "7.0.4" // Import Spotless plugin.
id("com.gradleup.shadow") version "8.3.6" // Import Shadow plugin.
id("com.diffplug.spotless") version "8.1.0" // Import Spotless plugin.
id("com.gradleup.shadow") version "8.3.9" // Import Shadow plugin.
id("checkstyle") // Import Checkstyle plugin.
eclipse // Import Eclipse plugin.
kotlin("jvm") version "2.1.21" // Import Kotlin JVM plugin.
@@ -40,7 +40,7 @@ repositories {
mavenCentral() // Import the Maven Central Maven Repository.
gradlePluginPortal() // Import the Gradle Plugin Portal Maven Repository.
maven { url = uri("https://repo.purpurmc.org/snapshots") } // Import the PurpurMC Maven Repository.
maven { url = uri("https://jitpack.io") } // Import Jitpack Maven Repository.
maven { url = uri("https://jitpack.io") } // Import the Jitpack Maven Repository.
}
/* ---------------------- Java project deps ---------------------------- */
@@ -62,6 +62,8 @@ tasks.withType<AbstractArchiveTask>().configureEach { // Ensure reproducible .ja
tasks.shadowJar {
exclude("org.bstats.*") // Exclude the bStats package from being shadowed.
exclude("io.github.miniplaceholders.*") // Exclude the MiniPlaceholders package from being shadowed.
isEnableRelocation = true
relocationPrefix = "${project.group}.shadow"
archiveClassifier.set("") // Use empty string instead of null.
minimize()
}
@@ -78,7 +80,19 @@ tasks.withType<JavaCompile>().configureEach {
options.encoding = "UTF-8" // Use UTF-8 file encoding.
}
/* ------------------------------- Checkstyle --------------------------- */
/* ----------------------------- Auto Formatting ------------------------ */
spotless {
java {
eclipse().configFile("config/formatter/eclipse-java-formatter.xml") // Eclipse java formatting.
leadingTabsToSpaces() // Convert leftover leading tabs to spaces.
removeUnusedImports() // Remove imports that aren't being called.
}
kotlinGradle {
ktfmt().kotlinlangStyle().configure { it.setMaxWidth(120) } // JetBrains Kotlin formatting.
target("build.gradle.kts", "settings.gradle.kts") // Gradle files to format.
}
}
checkstyle {
toolVersion = "10.18.1" // Declare checkstyle version to use.
configFile = file("config/checkstyle/checkstyle.xml") // Point checkstyle to config file.
+404
View File
@@ -0,0 +1,404 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<profiles version="23">
<profile kind="CodeFormatterProfile" name="TrueOG Network Formatting" version="23">
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_ellipsis" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_for_statment" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_block_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_for_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_package" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_javadoc_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indentation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_enum_constant_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_with_spaces" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_before_code_block" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_switch_case_expressions" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_package" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_local_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_root_tags" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.enabling_tag" value="@formatter:on"/>
<setting id="org.eclipse.jdt.core.formatter.comment.count_line_length_from_starting_position" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_record_components" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_method_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_parameter" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_then_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_explicitconstructorcall_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_method" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameterized_type_references" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_logical_operator" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_annotation_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_record_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.preserve_white_space_between_code_and_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_local_variable" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_abstract_method" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.keep_enum_constant_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.align_variable_declarations_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_union_type_in_multicatch" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_method_body" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.keep_else_statement_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_catch_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_parameterized_type_reference" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_explicit_constructor_call" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.keep_anonymous_type_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_switch_case_expressions" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_shift_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_annotation_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_code_block" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.put_empty_statement_on_new_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_parameters" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_loops" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_block_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_for_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_at_end_of_file_if_missing" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_switch_case_arrow_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.format_line_comment_starting_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_annotation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_ellipsis" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_enum_constant" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.text_block_indentation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.align_type_members_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assignment" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_module_statements" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_type_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_names_descriptions" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_if_then_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_first_class_body_declaration" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_closing_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.format_guardian_clause_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_if" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.align_assignment_statements_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_permitted_types" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression_chain" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_header" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_annotations" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assertion_message_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_method_declaration" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.align_fields_grouping_blank_lines" value="2147483647"/>
<setting id="org.eclipse.jdt.core.formatter.comment.new_lines_at_javadoc_boundaries" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_annotation_type_declaration" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_resources_in_try" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_block_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_allocation_expression" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_source_code" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_field" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_method" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_throw" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_not_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_type_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_brace_in_array_initializer" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_parenthesized_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_html" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_delcaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_compact_if" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.indent_empty_lines" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_type_arguments" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_unary_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_package" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_switch" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_else_in_if_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_label" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_declaration_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_while_in_do_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_permitted_types_in_type_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_record_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_opening_brace_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_breaks_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.javadoc_do_not_separate_block_tags" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_tag_description" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.keep_imple_if_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_constructor" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_string_concatenation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_multiple_fields" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_enum_constant_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_array_initializer" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_shift_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_method_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_shift_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_local_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_do_while_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_record_components" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_paren_in_cast" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_synchronized" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation_type_member_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_for_loop_header" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_additive_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_getter_setter_on_one_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_while" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_block_in_case_after_arrow" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_lines_in_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_record_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_relational_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_multiple_field_declarations" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_import_groups" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_logical_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_method_invocation" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_before_root_tags" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_record_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_switch_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_increments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_arrow_in_switch_default" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_inits" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.disabling_tag" value="@formatter:off"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_enum_constants" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_imports" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_end_of_method_body" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_if_while_statement" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_parenthesized_expression_in_return" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_field" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_type_declarations" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.keep_switch_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_for" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_catch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_switch" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_anonymous_type_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.never_indent_line_comments_on_first_column" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_for_inits" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_block" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_anonymous_type_declaration" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_method_invocation_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_arrow" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_switch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.align_tags_descriptions_grouped" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.comment.line_length" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.use_on_off_tags" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_method_body_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_brackets_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_loop_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_enum_constant" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_method_declaration" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_type_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_additive_operator" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_multiple_field_declarations" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_constructor" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_relational_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_superinterfaces" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_record_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_default" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_constructor_declaration" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_lambda_body" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.compact_else_if" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_catch" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_invocation_arguments" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_throws_clause_in_constructor_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_catch_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_try" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_parameter" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.comment.clear_blank_lines_in_javadoc_comment" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_relational_operator" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_empty_lines_to_preserve" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.align_arrows_in_switch_on_columns" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_case" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_additive_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_line_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.align_selector_in_method_invocation_on_expression_first_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_record_declaration" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_labeled_statement" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_switch_case_with_arrow_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_expressions_in_switch_case_with_colon" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_after_code_block" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_conditional_expression" value="80"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_after_annotation_on_type" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_type" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_block" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_local_variable" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_declaration" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_arrow_in_switch_default" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.insert_new_line_between_different_tags" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_additive_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_method_invocation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_while" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_wrapped_lines" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_between_empty_parens_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_field" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_conditional_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.indent_switchstatements_compare_to_cases" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.join_line_comments" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_synchronized" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_shift_operator" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_try_clause" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.keep_code_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_constructor_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_record_components" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.size" value="4"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_colon_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_try" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.continuation_indentation_for_array_initializer" value="2"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_record_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_assignment_operator" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_labeled_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_switch" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_superinterfaces" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_switch_case_with_arrow" value="20"/>
<setting id="org.eclipse.jdt.core.formatter.keep_lambda_body_block_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_annotations_on_method" value="49"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_record_constructor_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_record_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_empty_array_initializer_on_one_line" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_assertion_message" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_new_chunk" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_bracket_in_array_allocation_expression" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_constructor_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_assert" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_member_type" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_logical_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_record_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_if" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_semicolon" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_relational_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_postfix_operator" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_cast" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.format_block_comments" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration" value="16"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_method_declaration_throws" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_after_last_class_body_declaration" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.indent_statements_compare_to_body" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.keep_simple_while_body_on_same_line" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_logical_operator" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_between_statement_group_in_switch" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_annotation" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_enum_constant_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.parentheses_positions_in_lambda_declaration" value="common_lines"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_colon_in_case" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_comma_in_permitted_types" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_bracket_in_array_reference" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.keep_enum_declaration_on_one_line" value="one_line_never"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_method_declaration" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_enum_constant" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.brace_position_for_type_declaration" value="next_line_on_wrap"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.blank_lines_before_package" value="0"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_for" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_for_increments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_enum_constant" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_explicitconstructorcall_arguments" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.indent_body_declarations_compare_to_enum_constant_header" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_brace_in_constructor_declaration" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_comma_in_constructor_declaration_throws" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional" value="insert"/>
<setting id="org.eclipse.jdt.core.formatter.comment.indent_parameter_description" value="false"/>
<setting id="org.eclipse.jdt.core.formatter.number_of_blank_lines_at_beginning_of_code_block" value="1"/>
<setting id="org.eclipse.jdt.core.formatter.insert_new_line_before_finally_in_try_statement" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.tabulation.char" value="space"/>
<setting id="org.eclipse.jdt.core.formatter.wrap_before_string_concatenation" value="true"/>
<setting id="org.eclipse.jdt.core.formatter.lineSplit" value="120"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_after_opening_paren_in_annotation" value="do not insert"/>
<setting id="org.eclipse.jdt.core.formatter.insert_space_before_opening_paren_in_switch" value="insert"/>
</profile>
</profiles>
+54 -2
View File
@@ -12,121 +12,173 @@ import org.bukkit.entity.Player;
public class HatAPI extends ParticleHatsAPI {
public HatAPI(final CosmeticsOG core) {
super(core);
}
@Override
public boolean labelExists(String label) {
return core.getDatabase().getLabels(false).contains(label);
}
@Override
public void equipHatFromLabel(Player player, String label, boolean tellPlayer, boolean permanent)
throws InvalidLabelException, IllegalArgumentException {
throws InvalidLabelException, IllegalArgumentException
{
if (player == null) {
throw new IllegalArgumentException("player cannot be null!");
}
if (label == null) {
throw new InvalidLabelException("label cannot be null!");
}
Database database = core.getDatabase();
Hat hat = database.getHatFromLabel(label);
if (hat == null) {
throw new InvalidLabelException("Unable to find valid label: " + label);
}
hat.setPermanent(permanent);
core.getParticleManager().equipHat(player, hat, false);
if (tellPlayer) {
player.sendMessage(Message.COMMAND_SET_SUCCESS.getValue().replace("{1}", hat.getDisplayName()));
}
}
@Override
public void equipHatFromLabel(Player player, String label, boolean tellPlayer)
throws InvalidLabelException, IllegalArgumentException {
throws InvalidLabelException, IllegalArgumentException
{
equipHatFromLabel(player, label, tellPlayer, true);
}
@Override
public void equipHatFromLabel(Player player, String label) throws InvalidLabelException, IllegalArgumentException {
equipHatFromLabel(player, label, false, true);
}
@Override
public int getHatCount(Player player) {
return core.getPlayerState(player).getHatCount();
}
@Override
public void toggleHat(Player player, int index, boolean toggleStatus) throws IndexOutOfBoundsException {
Hat hat = core.getPlayerState(player).getActiveHats().get(index);
hat.setHidden(toggleStatus);
hat.setIsDisplaying(!toggleStatus, player);
}
@Override
public void toggleAllHats(Player player, boolean toggleStatus) {
for (Hat hat : core.getPlayerState(player).getActiveHats()) {
hat.setHidden(toggleStatus);
hat.setIsDisplaying(!toggleStatus, player);
}
}
@Override
@Deprecated
public boolean equipFromLabel(UUID playerID, String label, boolean tellPlayer) {
if (playerID == null) {
return false;
}
try {
Player player = Bukkit.getPlayer(playerID);
equipHatFromLabel(player, label, tellPlayer);
return true;
} catch (Exception e) {
return false;
}
}
@Override
@Deprecated
public boolean equipFromLabel(UUID playerID, String label) {
return equipFromLabel(playerID, label, false);
}
@Override
@Deprecated
public void toggleHat(UUID playerID, boolean vanished) {
Player player = Bukkit.getPlayer(playerID);
if (player != null) {
toggleHat(player, 0, vanished);
}
}
@Override
@Deprecated
public void toggleHat(UUID playerID) {
Player player = Bukkit.getPlayer(playerID);
if (player != null) {
Hat hat = core.getPlayerState(player).getActiveHats().get(0);
hat.setHidden(!hat.isHidden());
hat.setIsDisplaying(!hat.isHidden(), player);
}
}
@Override
@Deprecated
public boolean isWearingHat(UUID playerID) {
Player player = Bukkit.getPlayer(playerID);
if (player != null) {
return getHatCount(player) > 0;
}
return false;
}
}
@@ -11,7 +11,9 @@ public abstract class ParticleHatsAPI {
protected final CosmeticsOG core;
public ParticleHatsAPI(final CosmeticsOG core) {
this.core = core;
}
/**
@@ -25,11 +27,12 @@ public abstract class ParticleHatsAPI {
/**
* Creates a new hat from the given label and equips it
*
* @param player The player this new hat will be given to
* @param label The unique label that defines this hat
* @param player The player this new hat will be given to
* @param label The unique label that defines this hat
* @param tellPlayer Shows the player the HAT_EQUIPPED message
* @param permanent You can decide whether to equip this hat temporarily or permanently
* @throws InvalidLabelException If label doesn't not exist
* @param permanent You can decide whether to equip this hat temporarily or
* permanently
* @throws InvalidLabelException If label doesn't not exist
* @throws IllegalArgumentException If any arguments are invalid
*/
public abstract void equipHatFromLabel(Player player, String label, boolean tellPlayer, boolean permanent)
@@ -38,10 +41,10 @@ public abstract class ParticleHatsAPI {
/**
* Creates a new hat from the given label and equips it
*
* @param player The player this new hat will be given to
* @param label The unique label that defines this hat
* @param player The player this new hat will be given to
* @param label The unique label that defines this hat
* @param tellPlayer Shows the player the HAT_EQUIPPED message
* @throws InvalidLabelException If label doesn't not exist
* @throws InvalidLabelException If label doesn't not exist
* @throws IllegalArgumentException If any arguments are invalid
*/
public abstract void equipHatFromLabel(Player player, String label, boolean tellPlayer)
@@ -51,8 +54,8 @@ public abstract class ParticleHatsAPI {
* Creates a new hat from the given label and equips it
*
* @param player The player this new hat will be given to
* @param label The unique label that defines this hat
* @throws InvalidLabelException If label doesn't not exist
* @param label The unique label that defines this hat
* @throws InvalidLabelException If label doesn't not exist
* @throws IllegalArgumentException If any arguments are invalid
*/
public abstract void equipHatFromLabel(Player player, String label)
@@ -69,8 +72,8 @@ public abstract class ParticleHatsAPI {
/**
* Toggles a players active hat
*
* @param player The player we want to toggle hats for
* @param index The hat
* @param player The player we want to toggle hats for
* @param index The hat
* @param toggleStatus
* @throws InvalidHatException
*/
@@ -134,4 +137,5 @@ public abstract class ParticleHatsAPI {
*/
@Deprecated
public abstract boolean isWearingHat(UUID playerID);
}
+1 -3
View File
@@ -1,7 +1,5 @@
package cosmeticsOG;
public enum BuildType {
RELEASE,
RELEASE_CANDIDATE,
SNAPSHOT;
RELEASE, RELEASE_CANDIDATE, SNAPSHOT;
}
+158 -6
View File
@@ -54,9 +54,11 @@ public class CosmeticsOG extends JavaPlugin {
// TODO: [?] Enjin economy support?
// TODO: [?] Custom Player Head support? (Head Database, Heads Plugin)
// TODO: [?] Type texture support? Lets built-in types display custom images (eg. capes)
// TODO: [?] Type texture support? Lets built-in types display custom images
// (eg. capes)
// TODO: [?] More flexible mode support?
// Similar to tags, Have a list of tags that will trigger particles displaying / disabling
// Similar to tags, Have a list of tags that will trigger particles displaying /
// disabling
// Display when: (running, walking, flying, etc)
// Disable when: (pvp, swimming, etc)
@@ -64,7 +66,8 @@ public class CosmeticsOG extends JavaPlugin {
// TODO: [Future] Allow adding custom types images as frames to an animation
// TODO: [Future] Re-implement text particle type
// TODO: [Future] Let particles be attached to blocks...
// Have a separate block menu that shows nearby particles for the player to edit.
// Have a separate block menu that shows nearby particles for the player to
// edit.
public static CosmeticsOG instance;
public static double serverVersion;
@@ -110,6 +113,7 @@ public class CosmeticsOG extends JavaPlugin {
@Override
public void onEnable() {
instance = this;
serverVersion = getServerVersion();
logger = instance.getLogger();
@@ -117,9 +121,11 @@ public class CosmeticsOG extends JavaPlugin {
// Make sure we're running on a supported version
if (serverVersion < 13) {
particleRenderer = new LegacyParticleRenderer();
if (serverVersion < 8) {
Utils.logToConsole("-----------------------------------------------------------------------");
Utils.logToConsole("This version of ParticleHats is not compatible with your server version");
Utils.logToConsole("Download version 3.7.5 if your server is on a version older than 1.8");
@@ -127,16 +133,24 @@ public class CosmeticsOG extends JavaPlugin {
getServer().getPluginManager().disablePlugin(this);
return;
}
} else {
particleRenderer = new SpigotParticleRenderer();
}
// Check to see if we're running on Spigot
try {
Class.forName("net.md_5.bungee.api.chat.BaseComponent");
} catch (ClassNotFoundException e) {
supportsBaseComponent = false;
}
// Save default config
@@ -145,33 +159,45 @@ public class CosmeticsOG extends JavaPlugin {
Utils.logToConsole("Loading ParticleHats v" + getPluginMeta().getVersion());
Utils.logToConsole("");
{
// Create our menu manager factory
menuManagerFactory = new MenuManagerFactory(this);
if (YamlUtil.checkConfigForUpdates(getConfig())) {
if (SettingsManager.CONFIG_AUTO_UPDATE.getBoolean()) {
Utils.logToConsole("Updating config.yml");
YamlUtil.updateConfig(this, getConfig());
} else {
Utils.logToConsole("There is an update for config.yml, auto updates are disabled.");
}
}
// Load our database
databaseType = DatabaseType.fromAlias(SettingsManager.DATABASE_TYPE.getString());
database = databaseType.getDatabase(this);
// yaml always returns true, mysql will return false if the connection could not be made
// yaml always returns true, mysql will return false if the connection could not
// be made
if (!database.isEnabled()) {
Utils.logToConsole("---------------------------------------------------");
Utils.logToConsole("There was an error connecting to the MySQL database");
if (database.getException() != null) {
Utils.logToConsole(
"Error: " + database.getException().getClass().getSimpleName());
Utils.logToConsole("Error: " + database.getException().getClass().getSimpleName());
if (debugging) {
database.getException().printStackTrace();
}
}
Utils.logToConsole("Switching to yaml");
@@ -180,6 +206,7 @@ public class CosmeticsOG extends JavaPlugin {
databaseType = DatabaseType.YAML;
database = databaseType.getDatabase(this);
}
// Initialize our player state map
@@ -197,9 +224,13 @@ public class CosmeticsOG extends JavaPlugin {
hookManager = new HookManager(this);
if (SettingsManager.EDITOR_USE_ACTION_BAR.getBoolean() && supportsBaseComponent) {
prompt = new SpigotPrompt();
} else {
prompt = new BukkitPrompt();
}
// Handles menu updates
@@ -213,45 +244,62 @@ public class CosmeticsOG extends JavaPlugin {
// Handles displaying particles
entityTask = new EntityTask(this);
entityTask.runTaskTimer(this, 0, 4);
}
Utils.logToConsole("");
Utils.logToConsole("Done :)");
enabled = true;
}
public static CosmeticsOG getInstance() {
return instance;
}
@Override
public void onDisable() {
if (enabled) {
database.onDisable();
menuTask.cancel();
promptTask.cancel();
entityTask.cancel();
}
}
public void onReload() {
// locale.reload();
reloadConfig();
SettingsManager.onReload();
if (langFile == null || !(langFile.getName().equals(SettingsManager.LANG.getString()))) {
loadLang();
}
lang = YamlConfiguration.loadConfiguration(langFile);
Message.onReload();
if (SettingsManager.EDITOR_USE_ACTION_BAR.getBoolean() && supportsBaseComponent) {
prompt = new SpigotPrompt();
} else {
prompt = new BukkitPrompt();
}
eventManager.onReload();
@@ -262,258 +310,362 @@ public class CosmeticsOG extends JavaPlugin {
// Reload each equipped hats async task
entityState.values().forEach(EntityState::reload);
}
/**
* Get the ParticleHats Hat API
*
* @return
*/
public ParticleHatsAPI getAPI() {
return hatAPI;
}
/**
* Returns the Database this plugin is using
*
* @return
*/
public Database getDatabase() {
return database;
}
/**
* Returns the type of database this server is using
*
* @return
*/
public DatabaseType getDatabaseType() {
return databaseType;
}
/**
* Returns the MenuManagerFactory class
*
* @return
*/
public MenuManagerFactory getMenuManagerFactory() {
return menuManagerFactory;
}
/**
* Get the ParticleRenderer for this server version
*
* @return
*/
public ParticleRenderer getParticleRenderer() {
return particleRenderer;
}
/**
* Get the ResourceManager class
*
* @return
*/
public ResourceManager getResourceManager() {
return resourceManager;
}
/**
* Get the ParticleManager class
*
* @return
*/
public ParticleManager getParticleManager() {
return particleManager;
}
/**
* Get the HookManager class
*
* @return
*/
public HookManager getHookManager() {
return hookManager;
}
/**
* Returns the PlayerState object that belongs to this player
*
* @return
*/
public PlayerState getPlayerState(Player player) {
return (PlayerState) getEntityState(player);
}
public PlayerState getNewPlayerState(Player player) {
UUID id = player.getUniqueId();
removePlayerState(id);
return (PlayerState) getEntityState(player);
}
public EntityState getEntityState(Entity entity, int entityID) {
UUID id = entity.getUniqueId();
if (entityState.containsKey(id)) {
return entityState.get(id);
}
if (entity instanceof Player) {
EntityState eState;
if (entity.hasMetadata("NPC")) {
eState = new EntityState(entity, entityID);
} else {
eState = new PlayerState((Player) entity);
}
entityState.put(id, eState);
return eState;
}
EntityState eState = new EntityState(entity, entityID);
entityState.put(id, eState);
return eState;
}
public EntityState getEntityState(Entity entity) {
return getEntityState(entity, -1);
}
/**
* Checks to see if this entity has an EntityState object loaded
*
* @param entity
* @return
*/
public boolean hasEntityState(Entity entity) {
return entityState.containsKey(entity.getUniqueId());
}
/**
* Returns all currently active player states
*
* @return
*/
public Collection<EntityState> getEntityStates() {
return entityState.values();
}
public void removePlayerState(UUID id) {
EntityState es = entityState.remove(id);
if (es != null) {
es.clearActiveHats();
}
}
/**
* Check to see if we can use the bungee BaseComponent class
*
* @return
*/
public Boolean canUseBungee() {
return supportsBaseComponent;
}
/**
* Gets the current server version
*
* @return
*/
public double getServerVersion() {
String version = Bukkit.getBukkitVersion().split("-")[0].substring(2);
return Double.parseDouble(version);
}
/**
* Get this plugins CommandManager
*
* @return
*/
public CommandManager getCommandManager() {
return commandManager;
}
public YamlConfiguration getLocale() {
return lang;
}
/**
* Sends the player a message using their Action Bar
*
* @param player
* @param message
*/
public void prompt(Player player, MetaState message) {
prompt.prompt(player, message);
}
public Prompt getPrompt() {
return prompt;
}
/**
* Checks to see if a file exists with this name in the given folder
*
* @param folderName
* @param fileName
* @return
*/
public boolean fileExists(String folderName, String fileName) {
String directory = getDataFolder() + File.separator + folderName + File.separator + fileName;
File file = new File(directory);
return file.exists();
}
/**
* Logs a debug message to the server console if debugging is enabled
*
* @param obj
*/
public static void debug(Object obj) {
if (debugging) {
logger.log(Level.INFO, "[ParticleHats Debug] " + obj.toString());
}
}
private void loadLang() {
String targetLang = SettingsManager.LANG.getString();
File langFile = new File(getDataFolder() + File.separator + "lang" + File.separator + targetLang);
if (!langFile.exists()) {
if (targetLang.equals("en_US.lang")) {
Utils.logToConsole("Creating en_US.lang");
} else {
Utils.logToConsole("Could not find locale " + targetLang + ", switching to en_US.lang");
}
// Create our default .lang file since the specified one doesn't exist
createDefaultLang();
targetLang = "en_US.lang";
}
Utils.logToConsole("Loaded locale " + targetLang);
this.langFile = new File(getDataFolder() + File.separator + "lang" + File.separator + targetLang);
this.lang = YamlConfiguration.loadConfiguration(this.langFile);
}
private void createDefaultLang() {
File langFolder = new File(getDataFolder() + File.separator + "lang");
if (!langFolder.exists()) {
langFolder.mkdirs();
}
InputStream langStream = getResource("lang/en_US.lang");
if (langStream != null) {
File langFile = new File(getDataFolder() + File.separator + "lang" + File.separator + "en_US.lang");
if (langFile.exists()) {
langFile.delete();
}
try {
Files.copy(langStream, Paths.get(langFile.getPath()));
} catch (IOException e) {
}
}
}
private void checkDefaultLang() {
File langFile = new File(getDataFolder() + File.separator + "lang" + File.separator + "en_US.lang");
if (!langFile.exists()) {
createDefaultLang();
} else {
YamlConfiguration tempLangConfig = YamlConfiguration.loadConfiguration(langFile);
if (tempLangConfig.getDouble("version", 1.0) != LANG_VERSION) {
Utils.logToConsole("Updating en_US.lang");
createDefaultLang();
}
}
}
}
+21 -2
View File
@@ -17,6 +17,7 @@ public class Utils {
public static void cosmeticsOGPlaceholderMessage(Player p, String message) {
p.sendMessage(legacySerializerAnyCase((message)));
}
public static void logToConsole(Component component) {
@@ -25,6 +26,7 @@ public class Utils {
String stripped = stripColors(serialized);
CosmeticsOG.getInstance().getLogger().info("Cosmetics-OG " + stripped);
}
public static void logToConsole(String message) {
@@ -35,6 +37,7 @@ public class Utils {
String stripped = stripColors(serialized);
CosmeticsOG.getInstance().getLogger().info("Cosmetics-OG " + stripped);
}
public static TextComponent legacySerializerAnyCase(String subject) {
@@ -46,7 +49,9 @@ public class Utils {
if (c == '&') {
count++;
}
}
// Create an array to store the positions of '&' characters
@@ -60,30 +65,38 @@ public class Utils {
if (isUpperBukkitCode(subject.charAt(i + 1))) {
subject = replaceCharAtIndex(subject, (i + 1), Character.toLowerCase(subject.charAt(i + 1)));
}
positions[index++] = i;
}
}
return LegacyComponentSerializer.legacyAmpersand().deserialize(subject);
}
private static boolean isUpperBukkitCode(char input) {
char[] bukkitColorCodes = {'A', 'B', 'C', 'D', 'E', 'F', 'K', 'L', 'M', 'N', 'O', 'R'};
char[] bukkitColorCodes = { 'A', 'B', 'C', 'D', 'E', 'F', 'K', 'L', 'M', 'N', 'O', 'R' };
boolean match = false;
// Loop through each character in the array.
for (char c : bukkitColorCodes) {
// Check if the current character in the array is equal to the input character.
if (c == input) {
match = true;
}
}
return match;
}
private static String replaceCharAtIndex(String original, int index, char newChar) {
@@ -93,14 +106,18 @@ public class Utils {
// Create a new string with the replaced character
return original.substring(0, index) + newChar + original.substring(index + 1);
}
// If the index is invalid, return the original string
return original;
}
public static String stripColors(String input) {
if (input == null) return null;
if (input == null)
return null;
// Remove MiniMessage tags
String stripped = MINIMESSAGE_TAG_PATTERN.matcher(input).replaceAll("");
@@ -109,5 +126,7 @@ public class Utils {
stripped = LEGACY_COLOR_PATTERN.matcher(stripped).replaceAll("");
return stripped;
}
}
+131 -24
View File
@@ -32,11 +32,14 @@ public abstract class Command {
protected Map<String, Command> subCommands;
public Command() {
subCommands = new LinkedHashMap<String, Command>();
}
/**
* Generic command execute method
*
* @param plugin
* @param sender
* @param label
@@ -46,8 +49,9 @@ public abstract class Command {
public abstract boolean execute(CosmeticsOG core, Sender sender, String label, ArrayList<String> args);
/**
* Handles this commands onCommand
* Checks permission before passing command along
* Handles this commands onCommand Checks permission before passing command
* along
*
* @param core
* @param sender
* @param label
@@ -55,14 +59,19 @@ public abstract class Command {
* @return
*/
public boolean onCommand(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
if (!sender.isPlayer() && isPlayerOnly()) {
Utils.logToConsole(Message.COMMAND_ERROR_PLAYER_ONLY.getValue());
return false;
}
String argument = "";
if (args.size() >= 1) {
argument = args.get(0);
}
if (!hasPermission(sender, argument)) {
@@ -74,16 +83,20 @@ public abstract class Command {
} else {
Utils.logToConsole(Message.COMMAND_ERROR_NO_PERMISSION.getValue());
}
return false;
}
return execute(core, sender, label, args);
}
/**
* Generic tab complete method
*
* @param plugin
* @param sender
* @param label
@@ -91,239 +104,333 @@ public abstract class Command {
* @return
*/
public List<String> tabComplete(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
if (hasPermission(sender)) {
if (args.size() == 1) {
List<String> arguments = new ArrayList<String>();
for (Entry<String, Command> entry : subCommands.entrySet()) {
if (entry.getValue().hasPermission(sender)) {
arguments.add(entry.getKey());
}
}
return arguments;
} else {
String cmd = args.get(0);
if (subCommands.containsKey(cmd)) {
args.remove(0);
return subCommands.get(cmd).onTabComplete(core, sender, label, args);
}
}
}
return Arrays.asList("");
}
public List<String> onTabComplete(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
if (hasPermission(sender)) {
return tabComplete(core, sender, label, args);
}
return Arrays.asList("");
}
/**
* Return this commands name
*
* @return
*/
public abstract String getName();
/**
* Returns the argument name this command starts off with
*
* @return
*/
public abstract String getArgumentName();
/**
* Returns this commands arguments
*
* @return
*/
public abstract Message getUsage();
/**
* Returns a brief description of what this command does
*
* @return
*/
public abstract Message getDescription();
/**
* Returns this commands permission
*
* @return
*/
public abstract Permission getPermission();
/**
* Returns true if this command will appear in the help menu
*
* @return
*/
public abstract boolean showInHelp();
/**
* Checks to see if consoles can run this command
*
* @return
*/
public abstract boolean isPlayerOnly();
/**
* Checks to see if this command has a permission value
*
* @return
*/
public boolean hasPermission() {
return true;
}
/**
* Checks to see if this command has a wild card permission
*
* @return
*/
public boolean hasWildcardPermission() {
return false;
}
/**
* Returns this command's wild card permission
*
* @return
*/
public Permission getWildcardPermission() {
return Permission.NONE;
}
/**
* Registers a sub-command under this command
*
* @param command
*/
public void register(Command command) {
subCommands.put(command.getArgumentName(), command);
}
/**
* Returns a map of all sub-commands registered under this command
*
* @return
*/
public Map<String, Command> getSubCommands() {
final Map<String, Command> commands = new LinkedHashMap<String, Command>(subCommands);
return commands;
}
/**
* Recursively adds all sub-commands under this command to the Map
*
* @param commands
*/
public void getSubCommands(LinkedHashMap<String, Command> commands) {
for (Entry<String, Command> entry : subCommands.entrySet()) {
Command cmd = entry.getValue();
if (cmd.showInHelp()) {
commands.put(cmd.getName(), cmd);
}
cmd.getSubCommands(commands);
}
}
/**
* Checks to see if the player has permission to execute this command
*
* @param sender
* @return
*/
public boolean hasPermission(Sender sender) {
return hasPermission(sender, "");
}
/**
* Checks to see if the player has permission to execute this command
*
* @param sender
* @param arg
* @return
*/
public boolean hasPermission(Sender sender, String arg) {
if (!sender.isPlayer()) {
return true;
}
// If this command doesn't have a permission of its own, then
// we'll check the sub commands
if (!hasPermission()) {
for (Command command : subCommands.values()) {
if (command.hasPermission(sender)) {
return true;
}
}
}
// /h wild card check
if (Permission.COMMAND_ALL.hasPermission(sender)) {
return true;
}
// Specific command wild card check
if (hasWildcardPermission()) {
if (getWildcardPermission().hasPermission(sender)) {
return true;
}
}
// Regular permission check
if (getPermission().hasPermission(sender)) {
return true;
}
return false;
}
public Player getPlayer(Sender sender, String selector) {
CommandSender commandSender = sender.getCommandSender();
if (Permission.COMMAND_SELECTORS.hasPermission(sender)) {
switch (selector) {
case "@p":
{
Location location = null;
if (sender.isPlayer()) {
location = sender.getPlayer().getLocation();
} else if (commandSender instanceof BlockCommandSender) {
location = ((BlockCommandSender) commandSender)
.getBlock()
.getLocation();
}
if (location != null) {
return getNearestPlayer(location);
}
case "@p": {
Location location = null;
if (sender.isPlayer()) {
location = sender.getPlayer().getLocation();
} else if (commandSender instanceof BlockCommandSender) {
location = ((BlockCommandSender) commandSender).getBlock().getLocation();
}
if (location != null) {
return getNearestPlayer(location);
}
}
break;
case "@r":
{
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
Optional<? extends Player> player = players.stream()
.skip((int) (players.size() * Math.random()))
.findFirst();
case "@r": {
Collection<? extends Player> players = Bukkit.getOnlinePlayers();
Optional<? extends Player> player = players.stream().skip((int) (players.size() * Math.random()))
.findFirst();
if (player.isPresent()) {
return player.get();
if (player.isPresent()) {
return player.get();
}
}
}
break;
}
}
return Bukkit.getPlayer(selector);
}
private Player getNearestPlayer(Location location) {
double maxDistance = 100;
Player targetPlayer = null;
Collection<? extends Entity> nearbyEntities = location.getWorld().getNearbyEntities(location, 25, 25, 25);
for (Entity e : nearbyEntities) {
if (!(e instanceof Player)) {
continue;
}
Player player = (Player) e;
double distance = player.getLocation().distanceSquared(location);
if (distance < maxDistance) {
targetPlayer = player;
maxDistance = distance;
}
}
return targetPlayer;
}
}
@@ -20,6 +20,7 @@ public class MainCommand extends Command {
@Override
public boolean execute(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
// Execute this command
if (args.size() == 0) {
@@ -27,6 +28,7 @@ public class MainCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_PLAYER_ONLY.getValue());
return false;
}
List<Group> groups = core.getDatabase().getGroups(true);
@@ -40,13 +42,16 @@ public class MainCommand extends Command {
usingGroupMenu = true;
defaultMenu = g.getDefaultMenu();
}
}
// Use default menu if nothing was found
if (defaultMenu.equals("")) {
defaultMenu = SettingsManager.DEFAULT_MENU.getString();
}
String menuName = defaultMenu.contains(".") ? defaultMenu.split("\\.")[0] : defaultMenu;
@@ -58,23 +63,22 @@ public class MainCommand extends Command {
if (usingGroupMenu) {
Utils.cosmeticsOGPlaceholderMessage(
sender.getPlayer(),
Utils.cosmeticsOGPlaceholderMessage(sender.getPlayer(),
Message.COMMAND_ERROR_UNKNOWN_GROUP_MENU.getValue().replace("{1}", menuName));
} else {
// TODO: Figure out why the menu isn't in the database.
Player player = sender.getPlayer();
Utils.cosmeticsOGPlaceholderMessage(
player,
Utils.cosmeticsOGPlaceholderMessage(player,
"Does the menu exist in the database?: " + String.valueOf(database.menuExists(menuName)));
Utils.cosmeticsOGPlaceholderMessage(
player,
Utils.cosmeticsOGPlaceholderMessage(player,
Message.COMMAND_ERROR_UNKNOWN_MENU.getValue().replace("{1}", menuName));
}
return false;
}
StaticMenuManager staticManager = core.getMenuManagerFactory().getStaticMenuManager(playerState);
@@ -99,48 +103,67 @@ public class MainCommand extends Command {
} else {
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN.getValue());
}
return false;
}
args.remove(0);
return subCommands.get(cmd).onCommand(core, sender, label, args);
}
}
@Override
public String getName() {
return "main";
}
@Override
public String getArgumentName() {
return "h";
}
@Override
public Message getUsage() {
return Message.COMMAND_MAIN_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_MAIN_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_MAIN;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -7,6 +7,7 @@ import org.bukkit.entity.Player;
/**
* Represents both a CommandSender and Player
*
* @author MediusEcho
*
*/
@@ -19,6 +20,7 @@ public class Sender {
private final UUID playerID;
public Sender(CommandSender sender) {
boolean isPlayer = sender instanceof Player;
playerSender = isPlayer ? (Player) sender : null;
@@ -26,67 +28,93 @@ public class Sender {
commandSender = sender;
isConsoleSender = !isPlayer;
}
/**
* Returns true if this Sender is a Player
*
* @return
*/
public boolean isPlayer() {
return !isConsoleSender;
}
/**
* Returns the Player executing this command
*
* @return
*/
public Player getPlayer() {
return playerSender;
}
/**
* Returns the UUID of the Player executing this command
*
* @return
*/
public UUID getPlayerID() {
return playerID;
}
/**
* Returns the CommandSender executing this command
*
* @return
*/
public CommandSender getCommandSender() {
return commandSender;
}
/**
* Returns true if this Sender has permission
*
* @param permission
* @return
*/
public boolean hasPermission(String permission) {
return isConsoleSender ? true : playerSender.hasPermission(permission);
}
/**
* Returns true if this Sender has permission
*
* @param permission
* @return
*/
public boolean hasPermission(Permission permission) {
if (isConsoleSender) {
return true;
}
if (playerSender.hasPermission(permission.getPermission())) {
return true;
}
if (playerSender.hasPermission(Permission.COMMAND_ALL.getPermission())) {
return true;
}
return false;
}
}
@@ -30,9 +30,11 @@ public class AddGroupCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(getUsage().getValue());
}
return false;
}
String groupName = args.get(0);
@@ -43,6 +45,7 @@ public class AddGroupCommand extends Command {
if (args.size() >= 3) {
weight = StringUtil.toInt(args.get(2), 0);
}
boolean found = false;
@@ -54,105 +57,124 @@ public class AddGroupCommand extends Command {
found = true;
break;
}
}
if (found) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_GROUP_EXISTS.replace("{1}", groupName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_GROUP_EXISTS.replace("{1}", groupName));
} else {
Utils.logToConsole(Message.COMMAND_ERROR_GROUP_EXISTS.replace("{1}", groupName));
}
return false;
}
core.getDatabase().addGroup(groupName, defaultMenu, weight);
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ADD_GROUP_SUCCESS.replace("{1}", groupName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ADD_GROUP_SUCCESS.replace("{1}", groupName));
} else {
Utils.logToConsole(Message.COMMAND_ADD_GROUP_SUCCESS.replace("{1}", groupName));
}
return true;
}
@Override
public List<String> tabComplete(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
switch (args.size()) {
case 1:
return Arrays.asList("name");
case 2:
return new ArrayList<String>(core.getDatabase().getMenus(false).keySet());
case 3:
return Arrays.asList("weight");
}
return Arrays.asList("");
}
@Override
public String getName() {
return "add group";
}
@Override
public String getArgumentName() {
return "add";
}
@Override
public Message getUsage() {
return Message.COMMAND_ADD_GROUP_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_ADD_GROUP_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_GROUP_ADD;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_GROUP_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -33,9 +33,11 @@ public class AddTypeCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(getUsage().getValue());
}
return false;
}
if (core.getDatabaseType().equals(DatabaseType.YAML)) {
@@ -47,9 +49,11 @@ public class AddTypeCommand extends Command {
} else {
Utils.logToConsole(Message.COMMAND_ADD_TYPE_ERROR.getValue());
}
return false;
}
String imageName = args.get(0);
@@ -57,15 +61,17 @@ public class AddTypeCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_TYPE_EXISTS.replace("{1}", imageName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_TYPE_EXISTS.replace("{1}", imageName));
} else {
Utils.logToConsole(Message.COMMAND_ERROR_TYPE_EXISTS.replace("{1}", imageName));
}
return false;
}
MySQLDatabase database = (MySQLDatabase) core.getDatabase();
@@ -74,18 +80,21 @@ public class AddTypeCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ADD_TYPE_SUCCESS.replace("{1}", imageName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ADD_TYPE_SUCCESS.replace("{1}", imageName));
} else {
Utils.logToConsole(Message.COMMAND_ADD_TYPE_SUCCESS.replace("{1}", imageName));
}
return true;
}
return false;
}
@Override
@@ -96,72 +105,85 @@ public class AddTypeCommand extends Command {
List<String> images = new ArrayList<String>();
Map<String, BufferedImage> imageCache = core.getDatabase().getImages(false);
for (Entry<String, BufferedImage> entry :
core.getResourceManager().getImages().entrySet()) {
for (Entry<String, BufferedImage> entry : core.getResourceManager().getImages().entrySet()) {
if (!imageCache.containsKey(entry.getKey())) {
images.add(entry.getKey());
}
}
return images;
}
return Arrays.asList("");
}
@Override
public String getName() {
return "add type";
}
@Override
public String getArgumentName() {
return "add";
}
@Override
public Message getUsage() {
return Message.COMMAND_ADD_TYPE_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_ADD_TYPE_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_TYPE_ADD;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_TYPE_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -41,10 +41,13 @@ public class BukkitHelpCommand extends Command {
// Store the component in the map
commands.put(commandIndex++, component);
}
}
pages = (int) Math.ceil((double) commandIndex / 9D);
}
/***
@@ -59,16 +62,15 @@ public class BukkitHelpCommand extends Command {
Player player = sender.getPlayer();
Utils.cosmeticsOGPlaceholderMessage(
player,
"<white>> <light_purple>Cosmetics<red>-OG <yellow>v"
+ core.getPluginMeta().getVersion());
Utils.cosmeticsOGPlaceholderMessage(player,
"<white>> <light_purple>Cosmetics<red>-OG <yellow>v" + core.getPluginMeta().getVersion());
Utils.cosmeticsOGPlaceholderMessage(player, "<gray>> " + Message.COMMAND_HELP_TIP.getValue());
} else {
Utils.logToConsole("&r&2Cosmetics&c-OG &ev" + core.getPluginMeta().getVersion());
Utils.logToConsole("&7 " + Message.COMMAND_HELP_TIP.getValue());
}
for (Entry<Integer, Component> entry : commands.entrySet()) {
@@ -81,8 +83,11 @@ public class BukkitHelpCommand extends Command {
} else {
Utils.logToConsole(MiniMessage.miniMessage().serialize(component));
}
}
}
/**
@@ -93,12 +98,13 @@ public class BukkitHelpCommand extends Command {
protected void readPage(CommandSender sender) {
sender.sendMessage(MiniMessage.miniMessage()
.deserialize(
"<white>> <gold>ParticleHats v" + core.getPluginMeta().getVersion()));
.deserialize("<white>> <gold>ParticleHats v" + core.getPluginMeta().getVersion()));
for (Entry<Integer, Component> cmd : commands.entrySet()) {
sender.sendMessage(cmd.getValue());
}
}
@Override
@@ -113,15 +119,18 @@ public class BukkitHelpCommand extends Command {
} else {
Utils.logToConsole(Message.COMMAND_ERROR_NO_PERMISSION.getValue());
}
return false;
}
int targetPage = 0;
if (args.size() >= 1) {
targetPage = MathUtil.valueOf(args.get(0));
}
if (sender.isPlayer()) {
@@ -131,50 +140,60 @@ public class BukkitHelpCommand extends Command {
} else {
readPage(sender.getCommandSender());
}
return true;
}
@Override
public String getName() {
return "help";
}
@Override
public String getArgumentName() {
return "help";
}
@Override
public Message getUsage() {
return Message.COMMAND_HELP_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_HELP_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_HELP;
}
@Override
public boolean showInHelp() {
return false;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -22,6 +22,7 @@ public class ClearCommand extends Command {
clearPlayerCommand = new ClearPlayerCommand();
register(clearPlayerCommand);
}
@Override
@@ -36,6 +37,7 @@ public class ClearCommand extends Command {
Utils.cosmeticsOGPlaceholderMessage((Player) sender, Message.COMMAND_CLEAR_PLAYER_USAGE.getValue());
return false;
}
core.getPlayerState(sender.getPlayer()).clearActiveHats();
@@ -47,6 +49,7 @@ public class ClearCommand extends Command {
} else {
Utils.logToConsole(Message.COMMAND_CLEAR_SUCCESS.getValue());
}
return true;
@@ -54,7 +57,9 @@ public class ClearCommand extends Command {
} else {
return clearPlayerCommand.onCommand(core, sender, label, args);
}
}
@Override
@@ -68,72 +73,87 @@ public class ClearCommand extends Command {
for (Player p : Bukkit.getOnlinePlayers()) {
players.add(p.getName());
}
if (Permission.COMMAND_SELECTORS.hasPermission(sender)) {
players.add("@p");
players.add("@r");
}
return players;
}
}
return Arrays.asList("");
}
@Override
public String getName() {
return "clear";
}
@Override
public String getArgumentName() {
return "clear";
}
@Override
public Message getUsage() {
return Message.COMMAND_CLEAR_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_CLEAR_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_CLEAR;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_CLEAR_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -20,103 +20,114 @@ public class ClearPlayerCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(0)));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(0)));
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(0)));
}
return false;
}
if (!player.isOnline()) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
Utils.logToConsole(Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
}
return false;
}
core.getPlayerState(player).clearActiveHats();
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_CLEAR_PLAYER_SUCCESS.getValue().replace("{1}", player.getName()));
} else {
Utils.logToConsole(Message.COMMAND_CLEAR_PLAYER_SUCCESS.getValue().replace("{1}", player.getName()));
}
return true;
}
@Override
public String getName() {
return "clear player";
}
@Override
public String getArgumentName() {
return "player";
}
@Override
public Message getUsage() {
return Message.COMMAND_CLEAR_PLAYER_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_CLEAR_PLAYER_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_CLEAR_PLAYER;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_CLEAR_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -27,15 +27,16 @@ public class CreateCommand extends Command {
PlayerState playerState = core.getPlayerState(sender.getPlayer());
if (playerState.hasEditorOpen()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_ALREADY_EDITING.getValue());
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_ALREADY_EDITING.getValue());
return false;
}
}
String unsanitizedMenuName =
(args.get(0).contains(".") ? args.get(0).split("\\.")[0] : args.get(0));
String unsanitizedMenuName = (args.get(0).contains(".") ? args.get(0).split("\\.")[0] : args.get(0));
String menuName = StringUtil.sanitizeString(unsanitizedMenuName);
if (menuName.isEmpty()) {
@@ -46,9 +47,11 @@ public class CreateCommand extends Command {
} else {
Utils.logToConsole(Message.COMMAND_CREATE_INVALID.getValue());
}
return false;
}
Database database = core.getDatabase();
@@ -58,17 +61,17 @@ public class CreateCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_MENU_EXISTS.getValue().replace("{1}", menuName));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_MENU_EXISTS.getValue().replace("{1}", menuName));
Utils.logToConsole(Message.COMMAND_ERROR_MENU_EXISTS.getValue().replace("{1}", menuName));
}
return false;
}
database.createMenu(menuName);
@@ -81,8 +84,8 @@ public class CreateCommand extends Command {
} else {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_CREATE_SUCCESS.replace("{1}", menuName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_CREATE_SUCCESS.replace("{1}", menuName));
PlayerState playerState = core.getPlayerState(sender.getPlayer());
EditorMenuManager editorManager = core.getMenuManagerFactory().getEditorMenuManager(playerState);
@@ -90,53 +93,64 @@ public class CreateCommand extends Command {
editorManager.setEditingMenu(inventory);
editorManager.open();
}
return true;
}
return false;
}
@Override
public String getName() {
return "create menu";
}
@Override
public String getArgumentName() {
return "create";
}
@Override
public Message getUsage() {
return Message.COMMAND_CREATE_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_CREATE_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_CREATE;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -14,47 +14,56 @@ public class DebugCommand extends Command {
public boolean execute(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
return false;
}
@Override
public String getName() {
return "debug";
}
@Override
public String getArgumentName() {
return "debug";
}
@Override
public Message getUsage() {
return Message.UNKNOWN;
}
@Override
public Message getDescription() {
return Message.UNKNOWN;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_ALL;
}
@Override
public boolean showInHelp() {
return false;
}
@Override
public boolean isPlayerOnly() {
return true;
}
}
@@ -15,6 +15,7 @@ public class DebugDeleteMenu extends Command {
public List<String> tabComplete(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
return new ArrayList<String>(core.getDatabase().getMenus(false).keySet());
}
@Override
@@ -24,47 +25,56 @@ public class DebugDeleteMenu extends Command {
core.getDatabase().deleteMenu(menuName);
return false;
}
@Override
public String getName() {
return "delete";
}
@Override
public String getArgumentName() {
return "delete";
}
@Override
public Message getUsage() {
return Message.COMMAND_ARGUMENT_NONE;
}
@Override
public Message getDescription() {
return Message.COMMAND_ARGUMENT_NONE;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_ALL;
}
@Override
public boolean showInHelp() {
return false;
}
@Override
public boolean isPlayerOnly() {
return true;
}
}
@@ -29,9 +29,11 @@ public class DeleteGroupCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(getUsage().getValue());
}
return false;
}
String groupName = args.get(0);
@@ -45,37 +47,43 @@ public class DeleteGroupCommand extends Command {
found = true;
break;
}
}
if (!found) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_UNKNOWN_GROUP.replace("{1}", groupName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_GROUP.replace("{1}", groupName));
} else {
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_GROUP.replace("{1}", groupName));
}
return false;
}
core.getDatabase().deleteGroup(groupName);
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_REMOVE_GROUP_SUCCESS.replace("{1}", groupName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_REMOVE_GROUP_SUCCESS.replace("{1}", groupName));
} else {
Utils.logToConsole(Message.COMMAND_REMOVE_GROUP_SUCCESS.replace("{1}", groupName));
}
return true;
}
@Override
@@ -87,65 +95,78 @@ public class DeleteGroupCommand extends Command {
for (Group g : core.getDatabase().getGroups(false)) {
groups.add(g.getName());
}
return groups;
}
return Arrays.asList("");
}
@Override
public String getName() {
return "remove group";
}
@Override
public String getArgumentName() {
return "remove";
}
@Override
public Message getUsage() {
return Message.COMMAND_REMOVE_GROUP_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_REMOVE_GROUP_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_GROUP_REMOVE;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_GROUP_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -24,6 +24,7 @@ public class EditCommand extends Command {
public EditCommand(final CosmeticsOG core) {
this.core = core;
}
@Override
@@ -31,8 +32,7 @@ public class EditCommand extends Command {
if (args.size() == 1) {
List<String> menus =
new ArrayList<String>(core.getDatabase().getMenus(false).keySet());
List<String> menus = new ArrayList<String>(core.getDatabase().getMenus(false).keySet());
List<String> result = new ArrayList<String>();
menus.add("purchase");
@@ -42,13 +42,17 @@ public class EditCommand extends Command {
if (hasPermission(sender, menu)) {
result.add(menu);
}
}
return result;
}
return Arrays.asList("");
}
@Override
@@ -65,9 +69,11 @@ public class EditCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(Message.COMMAND_EDIT_USAGE.getValue());
}
return false;
}
PlayerState playerState = core.getPlayerState(sender.getPlayer());
@@ -77,6 +83,7 @@ public class EditCommand extends Command {
Utils.cosmeticsOGPlaceholderMessage((Player) sender, Message.COMMAND_ERROR_ALREADY_EDITING.getValue());
return false;
}
String menuName = (args.get(0).contains(".") ? args.get(0).split("\\.")[0] : args.get(0));
@@ -85,28 +92,31 @@ public class EditCommand extends Command {
MenuInventory inventory = database.getPurchaseMenu(playerState);
if (inventory != null) {
PurchaseMenuManager purchaseManager =
core.getMenuManagerFactory().getPurchaseMenuManager(playerState);
PurchaseMenuManager purchaseManager = core.getMenuManagerFactory().getPurchaseMenuManager(playerState);
purchaseManager.setEditingMenu(inventory);
purchaseManager.open();
}
return false;
}
if (!database.menuExists(menuName)) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
return false;
}
MenuInventory inventory = database.loadInventory(menuName, playerState);
if (inventory == null) {
return false;
}
EditorMenuManager editorManager = core.getMenuManagerFactory().getEditorMenuManager(playerState);
@@ -115,60 +125,70 @@ public class EditCommand extends Command {
editorManager.open();
return true;
}
@Override
public String getName() {
return "edit menu";
}
@Override
public String getArgumentName() {
return "edit";
}
@Override
public Message getUsage() {
return Message.COMMAND_EDIT_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_EDIT_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_EDIT;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_EDIT_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return true;
}
@Override
@@ -177,12 +197,14 @@ public class EditCommand extends Command {
if (!sender.isPlayer()) {
return true;
}
// /h wild card check.
if (Permission.COMMAND_ALL.hasPermission(sender)) {
return true;
}
// Specific command wild card check.
@@ -191,12 +213,13 @@ public class EditCommand extends Command {
if (getWildcardPermission().hasPermission(sender)) {
return true;
}
}
// Check for individual menu permissions.
List<String> menus =
new ArrayList<String>(core.getDatabase().getMenus(false).keySet());
List<String> menus = new ArrayList<String>(core.getDatabase().getMenus(false).keySet());
menus.add("purchase");
for (String menu : menus) {
@@ -204,10 +227,13 @@ public class EditCommand extends Command {
if (sender.hasPermission(getPermission().append(menu))) {
return true;
}
}
return false;
}
@Override
@@ -216,12 +242,14 @@ public class EditCommand extends Command {
if (!sender.isPlayer()) {
return true;
}
// /h wild card check.
if (Permission.COMMAND_ALL.hasPermission(sender)) {
return true;
}
// Specific command wild card check.
@@ -230,7 +258,9 @@ public class EditCommand extends Command {
if (getWildcardPermission().hasPermission(sender)) {
return true;
}
}
if (arg != null && !arg.equals("")) {
@@ -238,9 +268,13 @@ public class EditCommand extends Command {
if (sender.hasPermission(getPermission().append(arg))) {
return true;
}
}
return false;
}
}
@@ -31,9 +31,11 @@ public class EditGroupCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(getUsage().getValue());
}
return false;
}
Database database = core.getDatabase();
@@ -54,133 +56,158 @@ public class EditGroupCommand extends Command {
found = true;
break;
}
}
if (!found) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_UNKNOWN_GROUP.replace("{1}", groupName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_GROUP.replace("{1}", groupName));
} else {
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_GROUP.replace("{1}", groupName));
}
return false;
}
if (!database.getMenus(false).containsKey(menuName)) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
} else {
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
}
return false;
}
if (args.size() >= 3) {
weight = StringUtil.toInt(args.get(2), -1);
}
database.editGroup(groupName, menuName, weight);
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_EDIT_GROUP_SUCCESS.replace("{1}", groupName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_EDIT_GROUP_SUCCESS.replace("{1}", groupName));
} else {
Utils.logToConsole(Message.COMMAND_EDIT_GROUP_SUCCESS.replace("{1}", groupName));
}
return false;
}
@Override
public List<String> tabComplete(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
switch (args.size()) {
case 1: {
List<String> groups = new ArrayList<String>();
for (Group g : core.getDatabase().getGroups(false)) {
groups.add(g.getName());
}
return groups;
}
case 2:
return new ArrayList<String>(core.getDatabase().getMenus(false).keySet());
case 3:
return Arrays.asList("weight");
}
return Arrays.asList("");
}
@Override
public String getName() {
return "edit group";
}
@Override
public String getArgumentName() {
return "edit";
}
@Override
public Message getUsage() {
return Message.COMMAND_EDIT_GROUP_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_EDIT_GROUP_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_GROUP_EDIT;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_GROUP_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -27,14 +27,13 @@ public class GroupInfoCommand extends Command {
} else {
Utils.logToConsole(Message.COMMAND_GROUP_INFO_TIP.getValue());
}
for (Group g : groups) {
String info = infoTemplate
.replace("{1}", g.getName())
.replace("{2}", g.getDefaultMenu())
.replace("{3}", Integer.toString(g.getWeight()));
String info = infoTemplate.replace("{1}", g.getName()).replace("{2}", g.getDefaultMenu()).replace("{3}",
Integer.toString(g.getWeight()));
if (sender.isPlayer()) {
@@ -43,63 +42,76 @@ public class GroupInfoCommand extends Command {
} else {
Utils.logToConsole("> " + info);
}
}
return false;
}
@Override
public String getName() {
return "group info";
}
@Override
public String getArgumentName() {
return "info";
}
@Override
public Message getUsage() {
return Message.COMMAND_GROUP_INFO_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_GROUP_INFO_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_GROUP_INFO;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_GROUP_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -19,6 +19,7 @@ public class GroupsCommand extends Command {
register(new DeleteGroupCommand());
register(new EditGroupCommand());
register(new GroupInfoCommand());
}
@Override
@@ -32,10 +33,13 @@ public class GroupsCommand extends Command {
args.remove(0);
return subCommands.get(argument).onCommand(core, sender, label, args);
}
}
return false;
}
@Override
@@ -49,7 +53,9 @@ public class GroupsCommand extends Command {
if (entry.getValue().hasPermission(sender)) {
commands.add(entry.getKey());
}
}
return commands;
@@ -65,70 +71,85 @@ public class GroupsCommand extends Command {
args.remove(0);
return subCommand.onTabComplete(core, sender, label, args);
}
}
}
return Arrays.asList("");
}
@Override
public String getName() {
return "group";
}
@Override
public String getArgumentName() {
return "group";
}
@Override
public Message getUsage() {
return Message.UNKNOWN;
}
@Override
public Message getDescription() {
return Message.UNKNOWN;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_GROUP;
}
@Override
public boolean hasPermission() {
return false;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_GROUP_ALL;
}
@Override
public boolean showInHelp() {
return false;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -31,9 +31,11 @@ public class ImportCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(Message.COMMAND_IMPORT_USAGE.getValue());
}
return false;
}
if (core.getDatabaseType().equals(DatabaseType.YAML)) {
@@ -45,9 +47,11 @@ public class ImportCommand extends Command {
} else {
Utils.logToConsole(Message.COMMAND_ADD_TYPE_ERROR.getValue());
}
return false;
}
String menuName = args.get(0);
@@ -55,15 +59,17 @@ public class ImportCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_MENU_EXISTS.replace("{1}", menuName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_MENU_EXISTS.replace("{1}", menuName));
} else {
Utils.logToConsole(Message.COMMAND_ERROR_MENU_EXISTS.replace("{1}", menuName));
}
return false;
}
MySQLDatabase database = (MySQLDatabase) core.getDatabase();
@@ -73,30 +79,34 @@ public class ImportCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
} else {
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
}
return false;
}
database.importMenu(sender, config);
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_IMPORT_SUCCESS.replace("{1}", menuName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_IMPORT_SUCCESS.replace("{1}", menuName));
} else {
Utils.logToConsole(Message.COMMAND_IMPORT_SUCCESS.replace("{1}", menuName));
}
return true;
}
@Override
@@ -108,53 +118,64 @@ public class ImportCommand extends Command {
for (String menu : core.getResourceManager().getMenus()) {
menus.add(menu);
}
return menus;
}
return Arrays.asList("");
}
@Override
public String getName() {
return "import menu";
}
@Override
public String getArgumentName() {
return "import";
}
@Override
public Message getUsage() {
return Message.COMMAND_IMPORT_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_IMPORT_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_IMPORT;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -18,6 +18,7 @@ public class MetaCommand extends EditCommand {
public MetaCommand(final CosmeticsOG core) {
super(core);
}
@Override
@@ -32,17 +33,17 @@ public class MetaCommand extends EditCommand {
Utils.cosmeticsOGPlaceholderMessage(player, Message.META_ERROR.getValue());
return false;
}
if (args.size() == 0) {
Utils.cosmeticsOGPlaceholderMessage(player, Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.cosmeticsOGPlaceholderMessage(
player,
Message.COMMAND_META_USAGE.replace(
"{1}", playerState.getMetaState().getSuggestion()));
Utils.cosmeticsOGPlaceholderMessage(player,
Message.COMMAND_META_USAGE.replace("{1}", playerState.getMetaState().getSuggestion()));
return false;
}
EditorMenuManager editorManager = core.getMenuManagerFactory().getEditorMenuManager(playerState);
@@ -55,14 +56,17 @@ public class MetaCommand extends EditCommand {
} else {
metaState.onMetaSet(editorManager, player, args);
}
} else {
Utils.logToConsole(Message.COMMAND_ERROR_PLAYER_ONLY.getValue());
}
return true;
}
@Override
@@ -79,33 +83,41 @@ public class MetaCommand extends EditCommand {
} else {
return Arrays.asList(playerState.getMetaState().getSuggestion());
}
}
return Arrays.asList("");
}
@Override
public String getName() {
return "meta";
}
@Override
public String getArgumentName() {
return "meta";
}
@Override
public Message getUsage() {
return Message.COMMAND_META_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_META_DESCRIPTION;
}
}
@@ -33,6 +33,7 @@ public class OpenCommand extends Command {
openPlayerCommand = new OpenPlayerCommand(this);
register(openPlayerCommand);
}
@Override
@@ -47,7 +48,9 @@ public class OpenCommand extends Command {
if (hasPermission(sender, menu)) {
result.add(menu);
}
}
return result;
@@ -55,9 +58,11 @@ public class OpenCommand extends Command {
} else if (args.size() == 2) {
return openPlayerCommand.onTabComplete(core, sender, label, args);
}
return Arrays.asList("");
}
@Override
@@ -74,9 +79,11 @@ public class OpenCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(Message.COMMAND_OPEN_USAGE.getValue());
}
return false;
}
if (args.size() == 1) {
@@ -92,16 +99,18 @@ public class OpenCommand extends Command {
PlayerState playerState = core.getPlayerState(sender.getPlayer());
if (playerState.hasEditorOpen()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_ALREADY_EDITING.getValue());
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_ALREADY_EDITING.getValue());
return false;
}
AbstractMenu menu = getRequestedMenu(playerState, args.get(0), sender, sender.getPlayer());
if (menu == null) {
return false;
}
StaticMenuManager staticManager = (StaticMenuManager) playerState.getMenuManager();
@@ -110,66 +119,78 @@ public class OpenCommand extends Command {
menu.open();
return true;
}
} else {
return openPlayerCommand.onCommand(core, sender, label, args);
}
}
@Override
public String getName() {
return "open menu";
}
@Override
public String getArgumentName() {
return "open";
}
@Override
public Message getUsage() {
return Message.COMMAND_OPEN_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_OPEN_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_OPEN;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_OPEN_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
@Override
@@ -178,12 +199,14 @@ public class OpenCommand extends Command {
if (!sender.isPlayer()) {
return true;
}
// /h wild card check.
if (Permission.COMMAND_ALL.hasPermission(sender)) {
return true;
}
// Specific command wild card check.
@@ -192,7 +215,9 @@ public class OpenCommand extends Command {
if (getWildcardPermission().hasPermission(sender)) {
return true;
}
}
// Check for individual menu permissions
@@ -201,10 +226,13 @@ public class OpenCommand extends Command {
if (sender.hasPermission(getPermission().append(menu))) {
return true;
}
}
return false;
}
@Override
@@ -213,12 +241,14 @@ public class OpenCommand extends Command {
if (!sender.isPlayer()) {
return true;
}
// /h wild card check.
if (Permission.COMMAND_ALL.hasPermission(sender)) {
return true;
}
// Specific command wild card check.
@@ -227,7 +257,9 @@ public class OpenCommand extends Command {
if (getWildcardPermission().hasPermission(sender)) {
return true;
}
}
if (arg != null && !arg.equals("")) {
@@ -235,14 +267,18 @@ public class OpenCommand extends Command {
if (sender.hasPermission(getPermission().append(arg))) {
return true;
}
}
return false;
}
public AbstractMenu getRequestedMenu(
PlayerState playerState, String requestedMenuName, Sender sender, Player player) {
public AbstractMenu getRequestedMenu(PlayerState playerState, String requestedMenuName, Sender sender,
Player player)
{
// Grab the name without any extensions.
String menuName = (requestedMenuName.contains(".") ? requestedMenuName.split("\\.")[0] : requestedMenuName);
@@ -252,6 +288,7 @@ public class OpenCommand extends Command {
Utils.cosmeticsOGPlaceholderMessage((Player) sender, Message.COMMAND_OPEN_ERROR.replace("{1}", menuName));
return null;
}
StaticMenuManager staticManager = core.getMenuManagerFactory().getStaticMenuManager(playerState);
@@ -263,15 +300,19 @@ public class OpenCommand extends Command {
if (menuInventory == null) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_MENU.replace("{1}", menuName));
return null;
}
return new StaticMenu(core, staticManager, player, menuInventory);
}
return menu;
}
}
@@ -23,6 +23,7 @@ public class OpenPlayerCommand extends Command {
public OpenPlayerCommand(final OpenCommand parent) {
this.parent = parent;
}
@Override
@@ -37,9 +38,11 @@ public class OpenPlayerCommand extends Command {
} else {
Utils.logToConsole(getUsage().getValue());
}
return false;
}
Player targetPlayer = getPlayer(sender, args.get(1));
@@ -47,34 +50,35 @@ public class OpenPlayerCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(1)));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(1)));
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(1)));
}
return false;
}
if (!targetPlayer.isOnline()) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", targetPlayer.getName()));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", targetPlayer.getName()));
}
return false;
}
PlayerState playerState = core.getPlayerState(targetPlayer.getPlayer());
@@ -82,21 +86,24 @@ public class OpenPlayerCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_OPEN_PLAYER_EDITING.replace("{1}", targetPlayer.getName()));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_OPEN_PLAYER_EDITING.replace("{1}", targetPlayer.getName()));
} else {
Utils.logToConsole(Message.COMMAND_OPEN_PLAYER_EDITING.replace("{1}", targetPlayer.getName()));
}
return false;
}
AbstractMenu menu = parent.getRequestedMenu(playerState, args.get(0), sender, targetPlayer);
if (menu == null) {
return false;
}
StaticMenuManager staticManager = (StaticMenuManager) playerState.getMenuManager();
@@ -105,6 +112,7 @@ public class OpenPlayerCommand extends Command {
menu.open();
return true;
}
@Override
@@ -116,59 +124,71 @@ public class OpenPlayerCommand extends Command {
for (Player p : Bukkit.getOnlinePlayers()) {
players.add(p.getName());
}
if (Permission.COMMAND_SELECTORS.hasPermission(sender)) {
players.add("@p");
players.add("@r");
}
return players;
}
return Arrays.asList("");
}
@Override
public String getName() {
return "open menu for player";
}
@Override
public String getArgumentName() {
return "player";
}
@Override
public Message getUsage() {
return Message.COMMAND_OPEN_PLAYER_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_OPEN_PLAYER_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_OPEN_PLAYER;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -26,11 +26,12 @@ public class ParticlesCommand extends Command {
Utils.cosmeticsOGPlaceholderMessage((Player) sender, Message.COMMAND_ERROR_ALREADY_EDITING.getValue());
return false;
}
StaticMenuManager staticManager = core.getMenuManagerFactory().getStaticMenuManager(playerState);
EquippedParticlesMenu particlesMenu =
new EquippedParticlesMenu(core, staticManager, sender.getPlayer(), false);
EquippedParticlesMenu particlesMenu = new EquippedParticlesMenu(core, staticManager, sender.getPlayer(),
false);
staticManager.addMenu(particlesMenu);
particlesMenu.open();
@@ -40,48 +41,58 @@ public class ParticlesCommand extends Command {
} else {
return false;
}
}
@Override
public String getName() {
return "particles";
}
@Override
public String getArgumentName() {
return "particles";
}
@Override
public Message getUsage() {
return Message.COMMAND_PARTICLE_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_PARTICLE_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_PARTICLES;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return true;
}
}
@@ -24,50 +24,60 @@ public class ReloadCommand extends Command {
} else {
Utils.logToConsole(Message.COMMAND_RELOAD_SUCCESS.getValue());
}
return true;
}
@Override
public String getName() {
return "reload";
}
@Override
public String getArgumentName() {
return "reload";
}
@Override
public Message getUsage() {
return Message.COMMAND_RELOAD_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_RELOAD_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_RELOAD;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -28,9 +28,11 @@ public class RemoveTypeCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(getUsage().getValue());
}
return false;
}
String imageName = args.get(0);
@@ -38,33 +40,38 @@ public class RemoveTypeCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_ERROR_UNKNOWN_TYPE.replace("{1}", imageName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_TYPE.replace("{1}", imageName));
} else {
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_TYPE.replace("{1}", imageName));
}
return false;
}
if (core.getDatabase().deleteImage(imageName)) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender, Message.COMMAND_REMOVE_TYPE_SUCCESS.replace("{1}", imageName));
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_REMOVE_TYPE_SUCCESS.replace("{1}", imageName));
} else {
Utils.logToConsole(Message.COMMAND_REMOVE_TYPE_SUCCESS.replace("{1}", imageName));
}
return true;
}
return false;
}
@Override
@@ -73,62 +80,74 @@ public class RemoveTypeCommand extends Command {
if (args.size() == 1) {
return new ArrayList<String>(core.getDatabase().getImages(false).keySet());
}
return Arrays.asList("");
}
@Override
public String getName() {
return "remove type";
}
@Override
public String getArgumentName() {
return "remove";
}
@Override
public Message getUsage() {
return Message.COMMAND_REMOVE_TYPE_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_REMOVE_TYPE_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_TYPE_REMOVE;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_TYPE_ALL;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -33,9 +33,11 @@ public class SetCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(Message.COMMAND_SET_USAGE.getValue());
}
return false;
}
Player player = getPlayer(sender, args.get(0));
@@ -43,46 +45,48 @@ public class SetCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(0)));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(0)));
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(0)));
}
return false;
}
if (!player.isOnline()) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
Utils.logToConsole(Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
}
return false;
}
boolean permanent = true;
if (args.size() >= 3) {
permanent = Boolean.valueOf(args.get(2));
}
boolean tellPlayer = true;
if (args.size() >= 4) {
tellPlayer = Boolean.valueOf(args.get(3));
}
int demoTime = 200;
@@ -93,7 +97,9 @@ public class SetCommand extends Command {
demoTime = Integer.parseInt(args.get(4));
} catch (NumberFormatException ignored) {
}
}
String hatLabel = args.get(1);
@@ -106,18 +112,19 @@ public class SetCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_SET_ALREADY_SET.getValue().replace("{1}", player.getName()));
} else {
Utils.logToConsole(
Message.COMMAND_SET_ALREADY_SET.getValue().replace("{1}", player.getName()));
Utils.logToConsole(Message.COMMAND_SET_ALREADY_SET.getValue().replace("{1}", player.getName()));
}
return false;
}
}
Database database = core.getDatabase();
@@ -126,16 +133,17 @@ public class SetCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_SET_LABEL_ERROR.getValue().replace("{1}", hatLabel));
} else {
Utils.logToConsole(Message.COMMAND_SET_LABEL_ERROR.getValue().replace("{1}", hatLabel));
}
return false;
}
hat.setPermanent(permanent);
@@ -143,6 +151,7 @@ public class SetCommand extends Command {
hat.setCanBeSaved(false);
hat.setDemoDuration(demoTime);
}
if (core.getParticleManager().equipHat(player, hat, false)) {
@@ -150,84 +159,109 @@ public class SetCommand extends Command {
if (tellPlayer) {
player.sendMessage(Message.COMMAND_SET_SUCCESS.getValue().replace("{1}", hat.getDisplayName()));
}
}
return true;
}
@Override
public List<String> tabComplete(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
switch (args.size()) {
case 1: {
List<String> players = new ArrayList<String>();
for (Player p : Bukkit.getOnlinePlayers()) {
players.add(p.getName());
}
if (Permission.COMMAND_SELECTORS.hasPermission(sender)) {
players.add("@p");
players.add("@r");
}
return players;
}
case 2: {
return core.getDatabase().getLabels(false);
}
case 3:
case 4: {
return Arrays.asList("true", "false");
}
case 5: {
return Collections.singletonList("duration");
}
}
return Collections.singletonList("");
}
@Override
public String getName() {
return "set";
}
@Override
public String getArgumentName() {
return "set";
}
@Override
public Message getUsage() {
return Message.COMMAND_SET_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_SET_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_SET;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -36,14 +36,16 @@ public class SpigotHelpCommand extends BukkitHelpCommand {
+ Utils.stripColors(command.getPermission().getPermission());
TextComponent hoverText = Utils.legacySerializerAnyCase(commandText);
TextComponent commandComponent = Utils.legacySerializerAnyCase(
"&7> &3" + command.getUsage().getValue())
TextComponent commandComponent = Utils.legacySerializerAnyCase("&7> &3" + command.getUsage().getValue())
.hoverEvent(HoverEvent.showText(hoverText))
.clickEvent(ClickEvent.suggestCommand(command.getUsage().getValue()));
commands.put(command, commandComponent);
}
}
}
@Override
@@ -52,14 +54,14 @@ public class SpigotHelpCommand extends BukkitHelpCommand {
if (sender.isPlayer()) {
Player player = sender.getPlayer();
Utils.cosmeticsOGPlaceholderMessage(
player, "&f> &6ParticleHats v" + core.getPluginMeta().getVersion());
Utils.cosmeticsOGPlaceholderMessage(player, "&f> &6ParticleHats v" + core.getPluginMeta().getVersion());
Utils.cosmeticsOGPlaceholderMessage(player, "&7> " + Message.COMMAND_HELP_TIP.getValue());
} else {
Utils.logToConsole("&f> &6ParticleHats v" + core.getPluginMeta().getVersion());
Utils.logToConsole("&7> " + Message.COMMAND_HELP_TIP.getValue());
}
for (Entry<Command, TextComponent> entry : commands.entrySet()) {
@@ -75,8 +77,13 @@ public class SpigotHelpCommand extends BukkitHelpCommand {
} else {
Utils.logToConsole(component.content());
}
}
}
}
}
@@ -21,6 +21,7 @@ public class ToggleCommand extends Command {
togglePlayerCommand = new TogglePlayerCommand();
register(togglePlayerCommand);
}
@Override
@@ -37,14 +38,17 @@ public class ToggleCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(getUsage().getValue());
}
return false;
}
if (args.size() > 1) {
return togglePlayerCommand.onCommand(core, sender, label, args);
}
if (sender.isPlayer()) {
@@ -58,10 +62,13 @@ public class ToggleCommand extends Command {
} else {
Utils.cosmeticsOGPlaceholderMessage((Player) sender, Message.COMMAND_TOGGLE_OFF.getValue());
}
}
return true;
}
@Override
@@ -70,9 +77,11 @@ public class ToggleCommand extends Command {
if (args.size() == 2) {
return togglePlayerCommand.onTabComplete(core, sender, label, args);
}
return Arrays.asList("on", "off");
}
@Override
@@ -81,50 +90,60 @@ public class ToggleCommand extends Command {
if (args.size() == 2) {
return togglePlayerCommand.onCommand(core, sender, label, args);
}
return super.onCommand(core, sender, label, args);
}
@Override
public String getName() {
return "Toggle";
}
@Override
public String getArgumentName() {
return "toggle";
}
@Override
public Message getUsage() {
return Message.COMMAND_TOGGLE_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_TOGGLE_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_TOGGLE;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return true;
}
}
@@ -30,9 +30,11 @@ public class TogglePlayerCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(getUsage().getValue());
}
return false;
}
Player player = getPlayer(sender, args.get(1));
@@ -40,34 +42,34 @@ public class TogglePlayerCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(1)));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(1)));
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(1)));
}
return false;
}
if (!player.isOnline()) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
Utils.logToConsole(Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
}
return false;
}
boolean toggleStatus = StringUtil.getToggleValue(args.get(0));
@@ -76,30 +78,32 @@ public class TogglePlayerCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_TOGGLE_PLAYER_ON.getValue().replace("{1}", player.getName()));
} else {
Utils.logToConsole(Message.COMMAND_TOGGLE_PLAYER_ON.getValue().replace("{1}", player.getName()));
}
} else {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_TOGGLE_PLAYER_OFF.getValue().replace("{1}", player.getName()));
} else {
Utils.logToConsole(Message.COMMAND_TOGGLE_PLAYER_OFF.getValue().replace("{1}", player.getName()));
}
}
return true;
}
@Override
@@ -111,59 +115,71 @@ public class TogglePlayerCommand extends Command {
for (Player p : Bukkit.getOnlinePlayers()) {
players.add(p.getName());
}
if (Permission.COMMAND_SELECTORS.hasPermission(sender)) {
players.add("@p");
players.add("@r");
}
return players;
}
return Arrays.asList("");
}
@Override
public String getName() {
return "toggle player";
}
@Override
public String getArgumentName() {
return "player";
}
@Override
public Message getUsage() {
return Message.COMMAND_TOGGLE_PLAYER_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_TOGGLE_PLAYER_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_TOGGLE_PLAYER;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -17,6 +17,7 @@ public class TypeCommand extends Command {
register(new AddTypeCommand());
register(new RemoveTypeCommand());
}
@Override
@@ -30,10 +31,13 @@ public class TypeCommand extends Command {
args.remove(0);
return subCommands.get(argument).onCommand(core, sender, label, args);
}
}
return false;
}
@Override
@@ -47,7 +51,9 @@ public class TypeCommand extends Command {
if (sender.hasPermission(entry.getValue().getPermission())) {
commands.add(entry.getKey());
}
}
return commands;
@@ -63,70 +69,85 @@ public class TypeCommand extends Command {
args.remove(0);
return subCommand.onTabComplete(core, sender, label, args);
}
}
}
return Arrays.asList("");
}
@Override
public String getName() {
return "type";
}
@Override
public String getArgumentName() {
return "type";
}
@Override
public Message getUsage() {
return Message.UNKNOWN;
}
@Override
public Message getDescription() {
return Message.UNKNOWN;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_TYPE;
}
@Override
public boolean hasPermission() {
return false;
}
@Override
public boolean hasWildcardPermission() {
return true;
}
@Override
public Permission getWildcardPermission() {
return Permission.COMMAND_TYPE_ALL;
}
@Override
public boolean showInHelp() {
return false;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -33,9 +33,11 @@ public class UnsetCommand extends Command {
Utils.logToConsole(Message.COMMAND_ERROR_ARGUMENTS.getValue());
Utils.logToConsole(Message.COMMAND_UNSET_USAGE.getValue());
}
return false;
}
Player player = getPlayer(sender, args.get(0));
@@ -43,40 +45,41 @@ public class UnsetCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(0)));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(0)));
Utils.logToConsole(Message.COMMAND_ERROR_UNKNOWN_PLAYER.getValue().replace("{1}", args.get(0)));
}
return false;
}
if (!player.isOnline()) {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
} else {
Utils.logToConsole(
Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
Utils.logToConsole(Message.COMMAND_ERROR_OFFLINE_PLAYER.getValue().replace("{1}", player.getName()));
}
return false;
}
boolean tellPlayer = true;
if (args.size() >= 3) {
tellPlayer = Boolean.valueOf(args.get(2));
}
String hatLabel = args.get(1);
@@ -88,16 +91,17 @@ public class UnsetCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_UNSET_NOT_WEARING.getValue().replace("{1}", player.getName()));
} else {
Utils.logToConsole(Message.COMMAND_UNSET_NOT_WEARING.getValue().replace("{1}", player.getName()));
}
return false;
}
Database database = core.getDatabase();
@@ -106,102 +110,125 @@ public class UnsetCommand extends Command {
if (sender.isPlayer()) {
Utils.cosmeticsOGPlaceholderMessage(
(Player) sender,
Utils.cosmeticsOGPlaceholderMessage((Player) sender,
Message.COMMAND_UNSET_LABEL_ERROR.getValue().replace("{1}", hatLabel));
} else {
Utils.logToConsole(Message.COMMAND_UNSET_LABEL_ERROR.getValue().replace("{1}", hatLabel));
}
return false;
}
core.getPlayerState(player).removeHat(hat);
if (tellPlayer) {
player.sendMessage(Message.COMMAND_UNSET_SUCCESS.getValue().replace("{1}", hat.getDisplayName()));
}
return true;
}
@Override
public List<String> tabComplete(CosmeticsOG core, Sender sender, String label, ArrayList<String> args) {
switch (args.size()) {
case 1: {
List<String> players = new ArrayList<String>();
for (Player p : Bukkit.getOnlinePlayers()) {
players.add(p.getName());
}
if (Permission.COMMAND_SELECTORS.hasPermission(sender)) {
players.add("@p");
players.add("@r");
}
return players;
}
case 2: {
List<String> labels = new ArrayList<String>();
for (Hat h : core.getPlayerState(sender.getPlayer()).getActiveHats()) {
labels.add(h.getLabel());
}
return labels;
}
case 3: {
return Arrays.asList("true", "false");
}
}
return Collections.singletonList("");
}
@Override
public String getName() {
return "unset";
}
@Override
public String getArgumentName() {
return "unset";
}
@Override
public Message getUsage() {
return Message.COMMAND_UNSET_USAGE;
}
@Override
public Message getDescription() {
return Message.COMMAND_UNSET_DESCRIPTION;
}
@Override
public Permission getPermission() {
return Permission.COMMAND_UNSET;
}
@Override
public boolean showInHelp() {
return true;
}
@Override
public boolean isPlayerOnly() {
return false;
}
}
@@ -15,199 +15,158 @@ import org.jetbrains.annotations.NotNull;
*
*/
public enum CompatibleMaterial {
BARRIER("INK_SACK:8"),
BIRCH_BOAT("BOAT_BIRCH"),
BLACK_DYE("INK_SACK"),
BLACK_STAINED_GLASS_PANE("STAINED_GLASS_PANE:15"),
BLUE_STAINED_GLASS_PANE("STAINED_GLASS_PANE:11"),
BONE_MEAL("INK_SACK:15"),
BREEZE_ROD,
BROWN_DYE("INK_SACK:3"),
BROWN_STAINED_GLASS_PANE("STAINED_GLASS_PANE:12"),
CACTUS_GREEN("INK_SACK:2", "GREEN_DYE"),
CAMPFIRE("TORCH"),
CAULDRON("CAULDRON_ITEM"),
CHERRY_LEAVES,
CHERRY_LOG,
CHERRY_WOOD,
COBWEB,
COMPARATOR("REDSTONE_COMPARATOR"),
COMPOSTER("COMPOSTER"),
CONDUIT("CLAY_BALL"),
COPPER_BLOCK("STONE"),
CRIMSON_FUNGUS("MUSHROOM"),
CRYING_OBSIDIAN("OBSIDIAN"),
CYAN_CANDLE("STONE"),
CYAN_DYE("INK_SACK:6"),
CYAN_STAINED_GLASS_PANE("STAINED_GLASS_PANE:9"),
DANDELION("FLOWER", "DANDELION"),
DRAGON_HEAD("SKULL_ITEM:5"),
DRIPSTONE_BLOCK("STONE"),
EXPERIENCE_BOTTLE("EXP_BOTTLE"),
ENCHANTING_TABLE("ENCHANTMENT_TABLE"),
END_ROD,
FIRE_CHARGE("FIREBALL"),
FIREWORK_ROCKET("FIREWORK_CHARGE"),
FIREWORK_STAR("FIREWORK_CHARGE"),
GUSTER_POTTERY_SHERD,
GLOW_INK_SAC("INK_SACK:8"),
GRAY_DYE("INK_SACK:8"),
GRAY_STAINED_GLASS_PANE("STAINED_GLASS_PANE:7"),
GREEN_STAINED_GLASS_PANE("STAINED_GLASS_PANE:13"),
GUNPOWDER("SULPHUR"),
HORN_CORAL("ROSE_RED:8"),
HONEYCOMB("HONEYCOMB", "POTION"),
HONEY_BOTTLE("HONEY_BOTTLE", "POTION"),
INK_SAC("INK_SACK"),
LANTERN("TORCH"),
LAPIS_LAZULI("INK_SACK:4"),
LIGHT("STONE"),
LIGHTNING_ROD("STONE"),
LIGHT_BLUE_DYE("INK_SACK:12"),
LIGHT_BLUE_STAINED_GLASS_PANE("STAINED_GLASS_PANE:3"),
LIGHT_GRAY_DYE("INK_SACK:7"),
LIGHT_GRAY_STAINED_GLASS_PANE("STAINED_GLASS_PANE:8"),
LIME_DYE("INK_SACK:10"),
LIME_STAINED_GLASS_PANE("STAINED_GLASS_PANE:5"),
MAGENTA_DYE("INK_SACK:13"),
MAGENTA_STAINED_GLASS_PANE("STAINED_GLASS_PANE:2"),
MAGMA_BLOCK("MAGMA", "MAGMA_CREAM"),
MAP("EMPTY_MAP"),
MACE,
MUSHROOM_STEW("MUSHROOM_SOUP"),
MUSIC_DISC_CAT("GREEN_RECORD"),
MUSIC_DISC_BLOCKS("RECORD_3"),
MUSIC_DISC_FAR("RECORD_5"),
MUSIC_DISC_STRAD("RECORD_9"),
OAK_BOAT("BOAT"),
OMINOUS_BOTTLE,
OMINOUS_TRIAL_KEY,
ORANGE_DYE("INK_SACK:14"),
ORANGE_STAINED_GLASS_PANE("STAINED_GLASS_PANE:1"),
OXIDIZED_COPPER("STONE"),
PINK_DYE("INK_SACK:9"),
PINK_STAINED_GLASS_PANE("STAINED_GLASS_PANE:6"),
PLAYER_HEAD("SKULL_ITEM:3"),
PRISMARINE_SHARD("RAW_FISH"),
POINTED_DRIPSTONE("STONE"),
POWDER_SNOW_BUCKET("BUCKET"),
PUFFERFISH("RAW_FISH:3"),
PURPLE_DYE("INK_SACK:5"),
PURPLE_STAINED_GLASS_PANE("STAINED_GLASS_PANE:10"),
REDSTONE_TORCH("REDSTONE_TORCH_ON"),
RED_STAINED_GLASS_PANE("STAINED_GLASS_PANE:14"),
REPEATER("DIODE"),
ROSE_RED("INK_SACK:1", "RED_DYE"),
SCUTE("BOWL"),
SCULK("STONE"),
SCULK_SENSOR("STONE"),
SCULK_SHRIEKER("STONE"),
SCULK_CATALYST("STONE"),
SCULK_VEIN("STONE"),
SIGN("SIGN", "OAK_SIGN"),
SNOWBALL("SNOW_BALL"),
SOUL_CAMPFIRE("CAMPFIRE", "TORCH"),
SOUL_LANTERN("LANTERN", "TORCH"),
SPIDER_EYE,
SPLASH_POTION("POTION"),
SPORE_BLOSSOM("STONE"),
SUNFLOWER("DOUBLE_PLANT"),
TOTEM_OF_UNDYING("TOTEM"),
TRIAL_KEY,
TRIAL_SPAWNER,
TURTLE_HELMET("LEATHER_HELMET"),
VAULT,
WARPED_FUNGUS("BROWN_MUSHROOM"),
WEATHERED_COPPER("STONE"),
WHEAT_SEEDS("SEEDS"),
WHITE_DYE("INK_SACK:15"),
WHITE_STAINED_GLASS_PANE("STAINED_GLASS_PANE"),
WIND_CHARGE,
WITHER_SKELETON_SKULL("SKULL_ITEM:1"),
WRITABLE_BOOK("BOOK_AND_QUILL"),
YELLOW_DYE("INK_SACK:11"),
YELLOW_STAINED_GLASS_PANE("STAINED_GLASS_PANE:4"),
BARRIER("INK_SACK:8"), BIRCH_BOAT("BOAT_BIRCH"), BLACK_DYE("INK_SACK"),
BLACK_STAINED_GLASS_PANE("STAINED_GLASS_PANE:15"), BLUE_STAINED_GLASS_PANE("STAINED_GLASS_PANE:11"),
BONE_MEAL("INK_SACK:15"), BREEZE_ROD, BROWN_DYE("INK_SACK:3"), BROWN_STAINED_GLASS_PANE("STAINED_GLASS_PANE:12"),
CACTUS_GREEN("INK_SACK:2", "GREEN_DYE"), CAMPFIRE("TORCH"), CAULDRON("CAULDRON_ITEM"), CHERRY_LEAVES, CHERRY_LOG,
CHERRY_WOOD, COBWEB, COMPARATOR("REDSTONE_COMPARATOR"), COMPOSTER("COMPOSTER"), CONDUIT("CLAY_BALL"),
COPPER_BLOCK("STONE"), CRIMSON_FUNGUS("MUSHROOM"), CRYING_OBSIDIAN("OBSIDIAN"), CYAN_CANDLE("STONE"),
CYAN_DYE("INK_SACK:6"), CYAN_STAINED_GLASS_PANE("STAINED_GLASS_PANE:9"), DANDELION("FLOWER", "DANDELION"),
DRAGON_HEAD("SKULL_ITEM:5"), DRIPSTONE_BLOCK("STONE"), EXPERIENCE_BOTTLE("EXP_BOTTLE"),
ENCHANTING_TABLE("ENCHANTMENT_TABLE"), END_ROD, FIRE_CHARGE("FIREBALL"), FIREWORK_ROCKET("FIREWORK_CHARGE"),
FIREWORK_STAR("FIREWORK_CHARGE"), GUSTER_POTTERY_SHERD, GLOW_INK_SAC("INK_SACK:8"), GRAY_DYE("INK_SACK:8"),
GRAY_STAINED_GLASS_PANE("STAINED_GLASS_PANE:7"), GREEN_STAINED_GLASS_PANE("STAINED_GLASS_PANE:13"),
GUNPOWDER("SULPHUR"), HORN_CORAL("ROSE_RED:8"), HONEYCOMB("HONEYCOMB", "POTION"),
HONEY_BOTTLE("HONEY_BOTTLE", "POTION"), INK_SAC("INK_SACK"), LANTERN("TORCH"), LAPIS_LAZULI("INK_SACK:4"),
LIGHT("STONE"), LIGHTNING_ROD("STONE"), LIGHT_BLUE_DYE("INK_SACK:12"),
LIGHT_BLUE_STAINED_GLASS_PANE("STAINED_GLASS_PANE:3"), LIGHT_GRAY_DYE("INK_SACK:7"),
LIGHT_GRAY_STAINED_GLASS_PANE("STAINED_GLASS_PANE:8"), LIME_DYE("INK_SACK:10"),
LIME_STAINED_GLASS_PANE("STAINED_GLASS_PANE:5"), MAGENTA_DYE("INK_SACK:13"),
MAGENTA_STAINED_GLASS_PANE("STAINED_GLASS_PANE:2"), MAGMA_BLOCK("MAGMA", "MAGMA_CREAM"), MAP("EMPTY_MAP"), MACE,
MUSHROOM_STEW("MUSHROOM_SOUP"), MUSIC_DISC_CAT("GREEN_RECORD"), MUSIC_DISC_BLOCKS("RECORD_3"),
MUSIC_DISC_FAR("RECORD_5"), MUSIC_DISC_STRAD("RECORD_9"), OAK_BOAT("BOAT"), OMINOUS_BOTTLE, OMINOUS_TRIAL_KEY,
ORANGE_DYE("INK_SACK:14"), ORANGE_STAINED_GLASS_PANE("STAINED_GLASS_PANE:1"), OXIDIZED_COPPER("STONE"),
PINK_DYE("INK_SACK:9"), PINK_STAINED_GLASS_PANE("STAINED_GLASS_PANE:6"), PLAYER_HEAD("SKULL_ITEM:3"),
PRISMARINE_SHARD("RAW_FISH"), POINTED_DRIPSTONE("STONE"), POWDER_SNOW_BUCKET("BUCKET"), PUFFERFISH("RAW_FISH:3"),
PURPLE_DYE("INK_SACK:5"), PURPLE_STAINED_GLASS_PANE("STAINED_GLASS_PANE:10"), REDSTONE_TORCH("REDSTONE_TORCH_ON"),
RED_STAINED_GLASS_PANE("STAINED_GLASS_PANE:14"), REPEATER("DIODE"), ROSE_RED("INK_SACK:1", "RED_DYE"),
SCUTE("BOWL"), SCULK("STONE"), SCULK_SENSOR("STONE"), SCULK_SHRIEKER("STONE"), SCULK_CATALYST("STONE"),
SCULK_VEIN("STONE"), SIGN("SIGN", "OAK_SIGN"), SNOWBALL("SNOW_BALL"), SOUL_CAMPFIRE("CAMPFIRE", "TORCH"),
SOUL_LANTERN("LANTERN", "TORCH"), SPIDER_EYE, SPLASH_POTION("POTION"), SPORE_BLOSSOM("STONE"),
SUNFLOWER("DOUBLE_PLANT"), TOTEM_OF_UNDYING("TOTEM"), TRIAL_KEY, TRIAL_SPAWNER, TURTLE_HELMET("LEATHER_HELMET"),
VAULT, WARPED_FUNGUS("BROWN_MUSHROOM"), WEATHERED_COPPER("STONE"), WHEAT_SEEDS("SEEDS"), WHITE_DYE("INK_SACK:15"),
WHITE_STAINED_GLASS_PANE("STAINED_GLASS_PANE"), WIND_CHARGE, WITHER_SKELETON_SKULL("SKULL_ITEM:1"),
WRITABLE_BOOK("BOOK_AND_QUILL"), YELLOW_DYE("INK_SACK:11"), YELLOW_STAINED_GLASS_PANE("STAINED_GLASS_PANE:4"),
ZOMBIE_HEAD("SKULL_ITEM:2");
private Material material = Material.STONE;
private int durability = 0;
CompatibleMaterial(@NotNull String... aliases) {
Material material = Material.matchMaterial(this.toString());
if (material != null) {
this.material = material;
return;
}
for (String alias : aliases) {
// Look for a legacy material & damage value
if (alias.contains(":")) {
String[] aliasData = alias.split(":");
durability = Integer.parseInt(aliasData[1]);
material = Material.matchMaterial(aliasData[0]);
}
// Look for a 1.13+ material
else {
material = Material.matchMaterial(alias);
}
if (material != null) {
this.material = material;
return;
}
}
}
/**
* Get this CompatibleMaterial's compatible Material
*
* @return
*/
public Material getMaterial() {
return material;
}
/**
* Get this CompatibleMaterial's durability
*
* @return
*/
public int getDurability() {
return durability;
}
/**
* Creates and returns a new ItemStack
*
* @return
*/
public ItemStack getItem() {
return getItem(1);
}
/**
* Creates and returns a new ItemStack.
*
* @return A new ItemStack with the specified quantity.
*/
public ItemStack getItem(int quantity) {
if (CosmeticsOG.serverVersion >= 13) {
// For versions 1.13 and above, pass material, quantity, and default damage (e.g., 0).
// For versions 1.13 and above, pass material, quantity, and default damage
// (e.g., 0).
return ItemUtil.createItem(material, quantity, 0);
} else {
// For versions below 1.13, pass material, quantity, and durability (as short).
return ItemUtil.createItem(material, quantity, (short) durability);
}
}
/**
* Get the CompatibleMaterial that matches this name, or fallback if none are found
* Get the CompatibleMaterial that matches this name, or fallback if none are
* found
*
* @param name
* @param fallback
* @return
*/
public static CompatibleMaterial fromName(String name, CompatibleMaterial fallback) {
try {
return CompatibleMaterial.valueOf(name);
} catch (IllegalArgumentException error) {
return fallback;
}
}
}
@@ -5,44 +5,67 @@ import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;
public enum CompatibleSound {
ENTITY_VILLAGER_NO("VILLAGER_NO");
private final Sound sound;
CompatibleSound(String... aliases) {
sound = getCompatibleSound(toString(), aliases);
}
public void play(Player player, float volume, float pitch) {
if (sound == null) {
return;
}
player.playSound(player.getLocation(), sound, volume, pitch);
}
@Nullable
private Sound getCompatibleSound(String name, String[] aliases) {
Sound sound = getSound(name);
if (sound != null) {
return sound;
}
for (String alias : aliases) {
Sound soundAlias = getSound(alias);
if (alias != null) {
return soundAlias;
}
}
return null;
}
@Nullable
private Sound getSound(String name) {
try {
return Sound.valueOf(name);
} catch (Exception ignored) {
return null;
}
}
}
@@ -38,6 +38,7 @@ public class CustomConfig {
} else if (logOutput) {
Utils.logToConsole("Loading " + path + File.separator + fileName);
}
try {
@@ -46,9 +47,10 @@ public class CustomConfig {
} catch (Exception error) {
Utils.logToConsole("There was an error loading " + name + ", error: "
+ error.getClass().getSimpleName());
Utils.logToConsole("There was an error loading " + name + ", error: " + error.getClass().getSimpleName());
}
}
public CustomConfig(final CosmeticsOG core, final String path, File file, boolean logOutput) {
@@ -67,9 +69,10 @@ public class CustomConfig {
} catch (Exception error) {
Utils.logToConsole("There was an error loading " + name + ", error: "
+ error.getClass().getSimpleName());
Utils.logToConsole("There was an error loading " + name + ", error: " + error.getClass().getSimpleName());
}
}
/**
@@ -84,7 +87,9 @@ public class CustomConfig {
} catch (Exception error) {
Utils.logToConsole("There was an error saving the config file: " + error.getMessage());
}
}
/**
@@ -98,51 +103,61 @@ public class CustomConfig {
} catch (Exception error) {
Utils.logToConsole("There was an error loading " + name + ", error: "
+ error.getClass().getSimpleName());
Utils.logToConsole("There was an error loading " + name + ", error: " + error.getClass().getSimpleName());
}
}
/**
* Tries to delete this Configuration File.
*
* @return
*/
public boolean delete() {
return file.delete();
}
public String getFileName() {
return fileName;
}
/**
* Returns the name of this file.
*
* @return
*/
public String getName() {
return name;
}
public void set(String path, Object value) {
config.set(path, value);
}
/**
* Get this CustomConfig configuration file.
*
* @return
*/
public FileConfiguration getConfig() {
return config;
}
/**
* Creates a file.
* will try to load from an existing file first before creating a blank file.
* Creates a file. will try to load from an existing file first before creating
* a blank file.
*
* @param logOutput
* @return
*/
@@ -162,6 +177,7 @@ public class CustomConfig {
Utils.logToConsole("ERROR: Failed to copy resource: " + core.getResource(fileName) + "into file: "
+ file.getAbsolutePath());
}
} else {
@@ -175,15 +191,21 @@ public class CustomConfig {
} catch (IOException error) {
Utils.logToConsole("ERROR: Failed to create file: " + file.getAbsolutePath());
}
}
}
if (logOutput) {
Utils.logToConsole("Creating " + path + File.separator + fileName);
}
return file;
}
}
@@ -19,18 +19,21 @@ public interface Database {
/**
* Check to see if this database initialized successfully
*
* @return
*/
public boolean isEnabled();
/**
* Get this databases last exception
*
* @return
*/
public Exception getException();
/**
* Loads this menu and all its hats
*
* @param menuName
* @return
*/
@@ -38,6 +41,7 @@ public interface Database {
/**
* Loads and returns a MenuInventory linked to this alias
*
* @param alias
* @return
*/
@@ -45,6 +49,7 @@ public interface Database {
/**
* Gets the purchase menu
*
* @param playerState
* @return
*/
@@ -52,18 +57,21 @@ public interface Database {
/**
* Creates and inserts an empty menu into our database
*
* @param menuName
*/
public void createMenu(String menuName);
/**
* Deletes a menu and all it's data
*
* @param menuName
*/
public void deleteMenu(String menuName);
/**
* Check to see if this menu exists in our database
*
* @param menuName
* @return
*/
@@ -71,6 +79,7 @@ public interface Database {
/**
* Returns a list of menus that exist in our database
*
* @param forceUpdate Forces the menu cache to be updated
* @return
*/
@@ -78,12 +87,14 @@ public interface Database {
/**
* Gets all stored images on the database
*
* @return
*/
public Map<String, BufferedImage> getImages(boolean forceUpdate);
/**
* Gets a list of unique labels, duplicate labels are discarded
*
* @param forceUpdate
* @return
*/
@@ -91,6 +102,7 @@ public interface Database {
/**
* Gets a list of groups
*
* @param forceUpdate
* @return
*/
@@ -98,6 +110,7 @@ public interface Database {
/**
* Checks to see if this label has already been used in the database
*
* @param menuName
* @param label
* @return
@@ -106,6 +119,7 @@ public interface Database {
/**
* Loads a hat with the given label
*
* @param label
* @return
*/
@@ -113,6 +127,7 @@ public interface Database {
/**
* Inserts a new hat entry into the database
*
* @param menuName
* @param slot
*/
@@ -120,6 +135,7 @@ public interface Database {
/**
* Loads all data for this hat
*
* @param menuName
* @param slot
* @param hat
@@ -128,6 +144,7 @@ public interface Database {
/**
* Saves this hats modified values
*
* @param menuName
* @param slot
* @param hat
@@ -136,6 +153,7 @@ public interface Database {
/**
* Saves this nodes modified values
*
* @param menuName
* @param nodeIndex
* @param hat
@@ -144,6 +162,7 @@ public interface Database {
/**
* Creates a duplicate copy of this hat in a different slot
*
* @param menuName
* @param currentSlot
* @param newSlot
@@ -152,18 +171,21 @@ public interface Database {
/**
* Moves this hat and all data to a new menu
*
* @param hat
* @param fromMenu Current menu the hat is inside of
* @param toMenu Menu we're moving this hat to, leave as <b>NULL</b> if moving slots in the same menu
* @param toMenu Menu we're moving this hat to, leave as <b>NULL</b> if moving
* slots in the same menu
* @param fromSlot Current slot the hat is in
* @param toSlot New slot the hat will be moved to
* @param toSlot New slot the hat will be moved to
* @param swapping Swap this hat with the hat existing at the toSlot slot
*/
public void moveHat(
Hat fromHat, Hat toHat, String fromMenu, String toMenu, int fromSlot, int toSlot, boolean swapping);
public void moveHat(Hat fromHat, Hat toHat, String fromMenu, String toMenu, int fromSlot, int toSlot,
boolean swapping);
/**
* Deletes a hat from this menu
*
* @param menuName
* @param slot
*/
@@ -171,6 +193,7 @@ public interface Database {
/**
* Deletes a node from this menu
*
* @param menuName
* @param slot
*/
@@ -178,6 +201,7 @@ public interface Database {
/**
* Save this hats particle data to the menu
*
* @param menuName
* @param hat
*/
@@ -185,6 +209,7 @@ public interface Database {
/**
* Save this hats meta data to the menu
*
* @param menuName
* @param hat
* @param type
@@ -193,6 +218,7 @@ public interface Database {
/**
* Saves a menu's title
*
* @param menuName
* @param title
*/
@@ -200,6 +226,7 @@ public interface Database {
/**
* Save a menu's alias
*
* @param menuName
* @param alias
*/
@@ -207,6 +234,7 @@ public interface Database {
/**
* Saves a menu's size
*
* @param menuName
* @param rows
*/
@@ -214,6 +242,7 @@ public interface Database {
/**
* Saves the player's equipped hats
*
* @param id
* @param hats
*/
@@ -221,6 +250,7 @@ public interface Database {
/**
* Loads the player's equipped hats
*
* @param id
* @param callback
*/
@@ -228,6 +258,7 @@ public interface Database {
/**
* Saves the player's purchased hat
*
* @param id
* @param hat
*/
@@ -235,6 +266,7 @@ public interface Database {
/**
* Loads all hats the player has purchased
*
* @param id
* @param callback
*/
@@ -242,6 +274,7 @@ public interface Database {
/**
* Adds a new group to the database
*
* @param groupName
* @param defaultMenu
* @param weight
@@ -250,12 +283,14 @@ public interface Database {
/**
* Deletes a group from the database
*
* @param groupName
*/
public void deleteGroup(String groupName);
/**
* Edits an existing group
*
* @param groupName
* @param defaultMenu
* @param weight
@@ -264,6 +299,7 @@ public interface Database {
/***
* Removes a custom type image from the database
*
* @param imageName
* @return
*/
@@ -271,6 +307,7 @@ public interface Database {
/**
* Handle label changes
*
* @param oldLabel
* @param newLabel
*/
@@ -283,40 +320,53 @@ public interface Database {
@FunctionalInterface
public interface DatabaseCallback {
public void execute(Object o);
}
public enum DataType {
NONE(0),
DESCRIPTION(1),
PERMISSION_DESCRIPTION(2),
ICON(3),
TAGS(4),
ITEMSTACK(5);
NONE(0), DESCRIPTION(1), PERMISSION_DESCRIPTION(2), ICON(3), TAGS(4), ITEMSTACK(5);
private static Map<Integer, DataType> dataID = new HashMap<Integer, DataType>();
static {
for (DataType type : values()) {
dataID.put(type.id, type);
}
}
private final int id;
private DataType(final int id) {
this.id = id;
}
public int getID() {
return id;
}
public static DataType fromID(int id) {
if (dataID.containsKey(id)) {
return dataID.get(id);
}
return DataType.NONE;
}
}
}
@@ -7,48 +7,66 @@ public class Group {
private int weight;
public Group(final String name, String defaultMenu, int weight) {
this.name = name;
this.defaultMenu = defaultMenu;
this.weight = weight;
}
/**
* Get this groups name
*
* @return
*/
public String getName() {
return name;
}
/**
* Get the name of the menu this group will open
*
* @return
*/
public String getDefaultMenu() {
return defaultMenu;
}
/**
* Set the menu this group will open
*
* @param defaultMenu
*/
public void setDefaultMenu(String defaultMenu) {
this.defaultMenu = defaultMenu;
}
/**
* Get this groups importance
*
* @return
*/
public int getWeight() {
return weight;
}
/**
* Set this groups importance
*
* @param weight
*/
public void setWeight(int weight) {
this.weight = weight;
}
}
@@ -8,44 +8,62 @@ import java.util.Arrays;
import java.util.List;
public enum DatabaseType {
YAML("yml, yaml"),
MYSQL("mysql", "MySQL");
YAML("yml, yaml"), MYSQL("mysql", "MySQL");
private List<String> aliases;
private DatabaseType(String... aliases) {
this.aliases = Arrays.asList(aliases);
}
/**
* Returns the Database object of this type
*
* @return
*/
public Database getDatabase(CosmeticsOG core) {
switch (this) {
case MYSQL:
return new MySQLDatabase(core);
default:
return new YamlDatabase(core);
}
}
/**
* Returns the DatabaseType that uses this alias, or YAML if none are found
*
* @param alias
* @return
*/
public static DatabaseType fromAlias(String alias) {
for (DatabaseType type : values()) {
if (type.aliases.contains(alias.toLowerCase())) {
return type;
}
}
return YAML;
}
@FunctionalInterface
public interface DatabaseConnectionCallback {
public void onTimeout(Exception e);
}
}
File diff suppressed because it is too large. Load diff
@@ -30,7 +30,9 @@ public class MySQLHelper {
private int menuTableVersion = 1;
public MySQLHelper(final MySQLDatabase database) {
this.database = database;
}
/**
@@ -39,9 +41,13 @@ public class MySQLHelper {
* @throws SQLException
*/
public void initDatabase(CosmeticsOG core) throws SQLException {
database.async(() -> {
database.connect((connection) -> {
try (Statement initStatement = connection.createStatement()) {
// Version Table
String versionTable = "CREATE TABLE IF NOT EXISTS " + TableInfo.VERSION.getFormat() + "("
+ "type VARCHAR(32) PRIMARY KEY," + "version DECIMAL(4,2)" + ")";
@@ -83,245 +89,235 @@ public class MySQLHelper {
// Execute batch
initStatement.executeBatch();
}
// Insert our versions
String versionQuery = "INSERT IGNORE INTO " + TableInfo.VERSION.getFormat() + " VALUES (?,?)";
try (PreparedStatement verStatement = connection.prepareStatement(versionQuery)) {
for (TableInfo table : TableInfo.values()) {
verStatement.setString(1, table.getName());
verStatement.setDouble(2, table.getVersion());
verStatement.addBatch();
}
verStatement.executeBatch();
}
// Try to add our included custom types to the database
if (SettingsManager.LOAD_INCLUDED_CUSTOM_TYPES.getBoolean()) {
String imageInsertQuery = "INSERT IGNORE INTO " + TableInfo.IMAGES.getFormat() + " VALUES(?,?)";
try (PreparedStatement imageInsertStatement = connection.prepareStatement(imageInsertQuery)) {
InputStream vampireWingsStream = core.getResource("types/vampire_wings.png");
if (vampireWingsStream != null) {
try {
InputStream vampireStream = getTrimmedStream(vampireWingsStream);
imageInsertStatement.setString(1, "vampire_wings");
imageInsertStatement.setBlob(2, vampireStream);
imageInsertStatement.addBatch();
} catch (IOException e) {
e.printStackTrace();
}
}
InputStream butterflyWingsStream = core.getResource("types/butterfly_wings_colorable.png");
if (butterflyWingsStream != null) {
try {
InputStream butterflyStream = getTrimmedStream(butterflyWingsStream);
imageInsertStatement.setString(1, "butterfly_wings_colorable");
imageInsertStatement.setBlob(2, butterflyStream);
imageInsertStatement.addBatch();
} catch (IOException e) {
e.printStackTrace();
}
}
imageInsertStatement.executeBatch();
}
}
if (SettingsManager.LOAD_INCLUDED_MENUS.getBoolean()) {
String menuQuery =
"SELECT COUNT(*) AS count FROM " + TableInfo.MENUS.getFormat() + " WHERE name = ?";
String menuQuery = "SELECT COUNT(*) AS count FROM " + TableInfo.MENUS.getFormat()
+ " WHERE name = ?";
try (PreparedStatement menuStatement = connection.prepareStatement(menuQuery)) {
menuStatement.setString(1, "particles");
ResultSet set = menuStatement.executeQuery();
while (set.next()) {
if (set.getInt("count") == 0) {
File tempFolder = new File(core.getDataFolder() + File.separator + "temp");
if (!tempFolder.exists()) {
tempFolder.mkdirs();
}
InputStream particleStream = ResourceUtil.getMostCompatibleParticlesMenu();
if (particleStream != null) {
File particlesFile = new File(core.getDataFolder() + File.separator + "temp"
+ File.separator + "particles.yml");
try {
ResourceUtil.copyFile(particleStream, particlesFile);
CustomConfig menuConfig =
new CustomConfig(core, "temp", "particles.yml", false);
CustomConfig menuConfig = new CustomConfig(core, "temp", "particles.yml",
false);
if (menuConfig != null) {
database.importMenu(menuConfig, connection);
menuConfig.delete();
tempFolder.delete();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
}
});
});
}
public String getItemTableQuery(String menuName) {
return "CREATE TABLE IF NOT EXISTS " + Table.ITEMS.format(menuName) + " ("
+ "slot TINYINT PRIMARY KEY,"
+ "ver SMALLINT NOT NULL DEFAULT " + menuTableVersion + ","
+ "id VARCHAR(64),"
+ "durability INT,"
+ "title VARCHAR(128),"
+ "permission VARCHAR(64),"
+ "permission_denied VARCHAR(128),"
+ "type TINYINT,"
+ "custom_type VARCHAR(64),"
+ "location TINYINT,"
+ "mode TINYINT,"
+ "animation TINYINT,"
+ "tracking TINYINT,"
+ "label VARCHAR(128),"
+ "equip_message VARCHAR(128),"
+ "offset_x DECIMAL(3,1),"
+ "offset_y DECIMAL(3,1),"
+ "offset_z DECIMAL(3,1),"
+ "random_offset_x DECIMAL(3,1),"
+ "random_offset_y DECIMAL(3,1),"
+ "random_offset_z DECIMAL(3,1),"
+ "angle_x DECIMAL(4,1),"
+ "angle_y DECIMAL(4,1),"
+ "angle_z DECIMAL(4,1),"
+ "update_frequency TINYINT DEFAULT 2,"
+ "icon_update_frequency TINYINT DEFAULT 2,"
+ "speed TINYINT,"
+ "count TINYINT,"
+ "price INT,"
+ "sound VARCHAR(64),"
+ "volume DECIMAL(2,1) DEFAULT 1.0,"
+ "pitch DECIMAL(2,1) DEFAULT 1.0,"
+ "left_action TINYINT,"
+ "right_action TINYINT DEFAULT 12," // Mimic Left Click
+ "left_argument VARCHAR(128),"
+ "right_argument VARCHAR(128),"
+ "duration MEDIUMINT DEFAULT 200,"
+ "display_mode TINYINT,"
+ "scale DECIMAL(3,1) DEFAULT 1.0,"
+ "potion VARCHAR(64),"
+ "potion_strength TINYINT"
+ ")";
return "CREATE TABLE IF NOT EXISTS " + Table.ITEMS.format(menuName) + " (" + "slot TINYINT PRIMARY KEY,"
+ "ver SMALLINT NOT NULL DEFAULT " + menuTableVersion + "," + "id VARCHAR(64)," + "durability INT,"
+ "title VARCHAR(128)," + "permission VARCHAR(64)," + "permission_denied VARCHAR(128),"
+ "type TINYINT," + "custom_type VARCHAR(64)," + "location TINYINT," + "mode TINYINT,"
+ "animation TINYINT," + "tracking TINYINT," + "label VARCHAR(128)," + "equip_message VARCHAR(128),"
+ "offset_x DECIMAL(3,1)," + "offset_y DECIMAL(3,1)," + "offset_z DECIMAL(3,1),"
+ "random_offset_x DECIMAL(3,1)," + "random_offset_y DECIMAL(3,1)," + "random_offset_z DECIMAL(3,1),"
+ "angle_x DECIMAL(4,1)," + "angle_y DECIMAL(4,1)," + "angle_z DECIMAL(4,1),"
+ "update_frequency TINYINT DEFAULT 2," + "icon_update_frequency TINYINT DEFAULT 2," + "speed TINYINT,"
+ "count TINYINT," + "price INT," + "sound VARCHAR(64)," + "volume DECIMAL(2,1) DEFAULT 1.0,"
+ "pitch DECIMAL(2,1) DEFAULT 1.0," + "left_action TINYINT," + "right_action TINYINT DEFAULT 12," // Mimic
// Left
// Click
+ "left_argument VARCHAR(128)," + "right_argument VARCHAR(128)," + "duration MEDIUMINT DEFAULT 200,"
+ "display_mode TINYINT," + "scale DECIMAL(3,1) DEFAULT 1.0," + "potion VARCHAR(64),"
+ "potion_strength TINYINT" + ")";
}
public String getNodeTableQuery(String menuName) {
return "CREATE TABLE IF NOT EXISTS " + Table.NODES.format(menuName) + " ("
+ "slot TINYINT,"
+ "node_index INT,"
+ "ver SMALLINT,"
+ "type TINYINT,"
+ "custom_type VARCHAR(64),"
+ "location TINYINT,"
+ "mode TINYINT,"
+ "animation TINYINT,"
+ "tracking TINYINT,"
+ "offset_x DECIMAL(3,1),"
+ "offset_y DECIMAL(2,1),"
+ "offset_z DECIMAL(3,1),"
+ "random_offset_x DECIMAL(3,1),"
+ "random_offset_y DECIMAL(3,1),"
+ "random_offset_z DECIMAL(3,1),"
+ "angle_x DECIMAL(4,1),"
+ "angle_y DECIMAL(4,1),"
+ "angle_z DECIMAL(4,1),"
+ "update_frequency TINYINT,"
+ "speed TINYINT,"
+ "count TINYINT,"
+ "scale DECIMAL(3,1),"
+ "PRIMARY KEY(slot, node_index),"
+ "FOREIGN KEY(slot) REFERENCES " + Table.ITEMS.format(menuName)
+ "(slot) ON DELETE CASCADE ON UPDATE CASCADE"
+ ")";
return "CREATE TABLE IF NOT EXISTS " + Table.NODES.format(menuName) + " (" + "slot TINYINT," + "node_index INT,"
+ "ver SMALLINT," + "type TINYINT," + "custom_type VARCHAR(64)," + "location TINYINT," + "mode TINYINT,"
+ "animation TINYINT," + "tracking TINYINT," + "offset_x DECIMAL(3,1)," + "offset_y DECIMAL(2,1),"
+ "offset_z DECIMAL(3,1)," + "random_offset_x DECIMAL(3,1)," + "random_offset_y DECIMAL(3,1),"
+ "random_offset_z DECIMAL(3,1)," + "angle_x DECIMAL(4,1)," + "angle_y DECIMAL(4,1),"
+ "angle_z DECIMAL(4,1)," + "update_frequency TINYINT," + "speed TINYINT," + "count TINYINT,"
+ "scale DECIMAL(3,1)," + "PRIMARY KEY(slot, node_index)," + "FOREIGN KEY(slot) REFERENCES "
+ Table.ITEMS.format(menuName) + "(slot) ON DELETE CASCADE ON UPDATE CASCADE" + ")";
}
public String getMetaTableQuery(String menuName) {
return "CREATE TABLE IF NOT EXISTS " + Table.META.format(menuName) + " ("
+ "slot TINYINT,"
+ "type TINYINT,"
+ "line TINYINT,"
+ "line_ex TINYINT,"
+ "node_index INT,"
+ "value VARCHAR(256),"
+ "PRIMARY KEY(slot, type, line, line_ex, node_index),"
+ "FOREIGN KEY(slot) REFERENCES " + Table.ITEMS.format(menuName)
+ "(slot) ON DELETE CASCADE ON UPDATE CASCADE"
+ ")";
return "CREATE TABLE IF NOT EXISTS " + Table.META.format(menuName) + " (" + "slot TINYINT," + "type TINYINT,"
+ "line TINYINT," + "line_ex TINYINT," + "node_index INT," + "value VARCHAR(256),"
+ "PRIMARY KEY(slot, type, line, line_ex, node_index)," + "FOREIGN KEY(slot) REFERENCES "
+ Table.ITEMS.format(menuName) + "(slot) ON DELETE CASCADE ON UPDATE CASCADE" + ")";
}
public String getParticleTableQuery(String menuName) {
return "CREATE TABLE IF NOT EXISTS " + Table.PARTICLES.format(menuName) + " ("
+ "slot TINYINT,"
+ "particle_index TINYINT,"
+ "node_index INT,"
+ "particle_id TINYINT,"
return "CREATE TABLE IF NOT EXISTS " + Table.PARTICLES.format(menuName) + " (" + "slot TINYINT,"
+ "particle_index TINYINT," + "node_index INT," + "particle_id TINYINT,"
+ "color INT NOT NULL DEFAULT 16711680," // Red
+ "random BOOLEAN,"
+ "scale DECIMAL(4,2),"
+ "item_data VARCHAR(64),"
+ "block_data VARCHAR(64),"
+ "duration SMALLINT,"
+ "gravity BOOLEAN,"
+ "velocity_x DECIMAL(3,1),"
+ "velocity_y DECIMAL(3,1),"
+ "velocity_z DECIMAL(3,1),"
+ "PRIMARY KEY(slot, particle_index, node_index),"
+ "random BOOLEAN," + "scale DECIMAL(4,2)," + "item_data VARCHAR(64)," + "block_data VARCHAR(64),"
+ "duration SMALLINT," + "gravity BOOLEAN," + "velocity_x DECIMAL(3,1)," + "velocity_y DECIMAL(3,1),"
+ "velocity_z DECIMAL(3,1)," + "PRIMARY KEY(slot, particle_index, node_index),"
+ "FOREIGN KEY(slot) REFERENCES " + Table.ITEMS.format(menuName)
+ "(slot) ON DELETE CASCADE ON UPDATE CASCADE"
+ ")";
+ "(slot) ON DELETE CASCADE ON UPDATE CASCADE" + ")";
}
/**
* Creates a valid insert SQL statement based on the hats modified properties
*
* @param menuName
* @param hat
* @param particleIndex
* @return
*/
public String getParticleInsertQuery(String menuName, Hat hat, int particleIndex) {
StringBuilder propertyBuilder = new StringBuilder();
StringBuilder valueBuilder = new StringBuilder();
StringBuilder updateBuilder = new StringBuilder();
propertyBuilder.append("slot,particle_index,node_index");
valueBuilder
.append(hat.getSlot())
.append(",")
.append(particleIndex)
.append(",")
.append(hat.getIndex());
valueBuilder.append(hat.getSlot()).append(",").append(particleIndex).append(",").append(hat.getIndex());
String insertQuery =
"INSERT INTO " + Table.PARTICLES.format(menuName) + " ({1}) VALUES ({2}) ON DUPLICATE KEY UPDATE {3}";
String insertQuery = "INSERT INTO " + Table.PARTICLES.format(menuName)
+ " ({1}) VALUES ({2}) ON DUPLICATE KEY UPDATE {3}";
Map<String, String> editedProperties =
hat.getParticleData(particleIndex).getPropertyChanges();
Map<String, String> editedProperties = hat.getParticleData(particleIndex).getPropertyChanges();
for (Entry<String, String> value : editedProperties.entrySet()) {
propertyBuilder.append(",").append(value.getKey());
valueBuilder.append(",").append(value.getValue());
updateBuilder.append(",").append(value.getKey()).append("=").append(value.getValue());
}
String properties = propertyBuilder.toString();
String values = valueBuilder.toString();
String updates = "";
if (updateBuilder.length() > 0) {
updates = updateBuilder.deleteCharAt(0).toString();
}
return insertQuery.replace("{1}", properties).replace("{2}", values).replace("{3}", updates);
}
/**
* Creates a valid insert SQL statement based on the hats modified properties
*
* @param menuName
* @param hat
* @param slot
@@ -329,6 +325,7 @@ public class MySQLHelper {
* @return
*/
public String getNodeInsertQuery(String menuName, Hat hat, int slot, int index) {
StringBuilder propertyBuilder = new StringBuilder();
StringBuilder valueBuilder = new StringBuilder();
StringBuilder updateBuilder = new StringBuilder();
@@ -337,128 +334,65 @@ public class MySQLHelper {
valueBuilder.append(slot).append(",").append(index);
updateBuilder.append("node_index=").append(index);
String query =
"INSERT INTO " + Table.NODES.format(menuName) + " ({1}) VALUES ({2}) ON DUPLICATE KEY UPDATE {3}";
String query = "INSERT INTO " + Table.NODES.format(menuName)
+ " ({1}) VALUES ({2}) ON DUPLICATE KEY UPDATE {3}";
Map<String, String> editedProperties = hat.getPropertyChanges();
for (Entry<String, String> value : editedProperties.entrySet()) {
propertyBuilder.append(",").append(value.getKey());
valueBuilder.append(",").append(value.getValue());
updateBuilder.append(",").append(value.getKey()).append("=").append(value.getValue());
}
return query.replace("{1}", propertyBuilder.toString())
.replace("{2}", valueBuilder.toString())
.replace("{3}", updateBuilder.toString());
return query.replace("{1}", propertyBuilder.toString()).replace("{2}", valueBuilder.toString()).replace("{3}",
updateBuilder.toString());
}
public String getImportQuery(String menuName) {
return "INSERT INTO " + Table.ITEMS.format(menuName) + " ("
+ "slot,"
+ "ver,"
+ "id,"
+ "durability,"
+ "title,"
+ "permission,"
+ "permission_denied,"
+ "type,"
+ "custom_type,"
+ "location,"
+ "mode,"
+ "animation,"
+ "tracking,"
+ "label,"
+ "equip_message,"
+ "offset_x,"
+ "offset_y,"
+ "offset_z,"
+ "random_offset_x,"
+ "random_offset_y,"
+ "random_offset_z,"
+ "angle_x,"
+ "angle_y,"
+ "angle_z,"
+ "update_frequency,"
+ "icon_update_frequency,"
+ "speed,"
+ "count,"
+ "price,"
+ "sound,"
+ "volume,"
+ "pitch,"
+ "left_action,"
+ "right_action,"
+ "left_argument,"
+ "right_argument,"
+ "duration,"
+ "display_mode,"
+ "scale,"
+ "potion,"
+ "potion_strength"
+ ") VALUES {1}";
return "INSERT INTO " + Table.ITEMS.format(menuName) + " (" + "slot," + "ver," + "id," + "durability,"
+ "title," + "permission," + "permission_denied," + "type," + "custom_type," + "location," + "mode,"
+ "animation," + "tracking," + "label," + "equip_message," + "offset_x," + "offset_y," + "offset_z,"
+ "random_offset_x," + "random_offset_y," + "random_offset_z," + "angle_x," + "angle_y," + "angle_z,"
+ "update_frequency," + "icon_update_frequency," + "speed," + "count," + "price," + "sound," + "volume,"
+ "pitch," + "left_action," + "right_action," + "left_argument," + "right_argument," + "duration,"
+ "display_mode," + "scale," + "potion," + "potion_strength" + ") VALUES {1}";
}
public String getParticleImportQuery(String menuName) {
return "INSERT INTO " + Table.PARTICLES.format(menuName) + " ("
+ "slot,"
+ "particle_index,"
+ "node_index,"
+ "particle_id,"
+ "color,"
+ "random,"
+ "scale,"
+ "item_data,"
+ "block_data,"
+ "duration,"
+ "gravity,"
+ "velocity_x,"
+ "velocity_y,"
+ "velocity_z"
+ ") VALUES {1}";
return "INSERT INTO " + Table.PARTICLES.format(menuName) + " (" + "slot," + "particle_index," + "node_index,"
+ "particle_id," + "color," + "random," + "scale," + "item_data," + "block_data," + "duration,"
+ "gravity," + "velocity_x," + "velocity_y," + "velocity_z" + ") VALUES {1}";
}
public String getMetaImportQuery(String menuName) {
return "INSERT INTO " + Table.META.format(menuName) + " ("
+ "slot,"
+ "type,"
+ "line,"
+ "line_ex,"
+ "node_index,"
+ "value"
+ ") VALUES {1}";
return "INSERT INTO " + Table.META.format(menuName) + " (" + "slot," + "type," + "line," + "line_ex,"
+ "node_index," + "value" + ") VALUES {1}";
}
public String getNodeImportQuery(String menuName) {
return "INSERT INTO " + Table.NODES.format(menuName) + " ("
+ "slot,"
+ "node_index,"
+ "ver,"
+ "type,"
+ "custom_type,"
+ "location,"
+ "mode,"
+ "animation,"
+ "tracking,"
+ "offset_x,"
+ "offset_y,"
+ "offset_z,"
+ "random_offset_x,"
+ "random_offset_y,"
+ "random_offset_z,"
+ "angle_x,"
+ "angle_y,"
+ "angle_z,"
+ "update_frequency,"
+ "speed,"
+ "count,"
+ "scale"
+ ") VALUES {1}";
return "INSERT INTO " + Table.NODES.format(menuName) + " (" + "slot," + "node_index," + "ver," + "type,"
+ "custom_type," + "location," + "mode," + "animation," + "tracking," + "offset_x," + "offset_y,"
+ "offset_z," + "random_offset_x," + "random_offset_y," + "random_offset_z," + "angle_x," + "angle_y,"
+ "angle_z," + "update_frequency," + "speed," + "count," + "scale" + ") VALUES {1}";
}
public void populatePurchaseMenu(Connection connection) throws SQLException {
String insertQuery = "INSERT INTO " + Table.ITEMS.format("purchase")
+ " (slot,id,durability,title,left_action) VALUES (?,?,?,?,?)";
try (PreparedStatement populateStatement = connection.prepareStatement(insertQuery)) {
// Purchase Item
populateStatement.setInt(1, 13);
populateStatement.setString(2, Material.STONE.toString());
@@ -484,18 +418,24 @@ public class MySQLHelper {
populateStatement.addBatch();
populateStatement.executeBatch();
}
}
/**
* Creates a new InputStream from an existing InputStream removing comments
*
* @param stream
* @return
*/
private InputStream getTrimmedStream(InputStream stream) throws IOException {
BufferedImage image = ImageIO.read(stream);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
return new ByteArrayInputStream(baos.toByteArray());
}
}
File diff suppressed because it is too large. Load diff
File diff suppressed because it is too large. Load diff
@@ -33,204 +33,285 @@ public class EditorMenuManager extends MenuManager {
private float soundPitch;
public EditorMenuManager(CosmeticsOG core, Player owner) {
super(core, owner);
this.sound = SettingsManager.EDITOR_SOUND_ID.getSound();
this.soundVolume = (float) SettingsManager.EDITOR_SOUND_VOLUME.getDouble();
this.soundPitch = (float) SettingsManager.EDITOR_SOUND_PITCH.getDouble();
}
@Override
public void onClick(InventoryClickEvent event, boolean inMenu) {
super.onClick(event, inMenu, getCurrentMenu());
}
@Override
public void open() {
if (editorBaseMenu == null) {
return;
}
getCurrentMenu().open();
}
@Override
public void onTick(int ticks) {
AbstractMenu menu = openMenus.peekLast();
if (menu != null) {
menu.onTick(ticks);
}
}
@Override
public void playSound(MenuClickResult result) {
if (SettingsManager.EDITOR_SOUND_ENABLED.getBoolean()) {
if (sound != null) {
float p = (float) MathUtil.clamp(soundPitch + (float) result.getModifier(), 0, 2);
owner.playSound(owner.getLocation(), sound, soundVolume, p);
}
}
}
@Override
public boolean canUnregister() {
return !openingMenu && ownerState.getMetaState() == MetaState.NONE;
}
@Override
public void willUnregister() {
Database database = core.getDatabase();
MenuInventory menuInventory = editorBaseMenu.getMenuInventory();
String menuName = menuInventory.getName();
for (Entry<Integer, Hat> hats : menuInventory.getHats().entrySet()) {
Hat hat = hats.getValue();
if (hat.isModified()) {
database.saveHat(menuName, hats.getKey(), hat);
hat.clearPropertyChanges();
}
if (hat.getNodeCount() > 0) {
for (Hat node : hat.getNodes()) {
if (node.isModified()) {
database.saveNode(menuName, node.getIndex(), node);
node.clearPropertyChanges();
}
}
}
}
// Forces every open menu to close and save changes
for (AbstractMenu am : openMenus) {
am.onClose(true);
}
super.unregister();
}
public void setEditingMenu(MenuInventory inventory) {
editorBaseMenu = new EditorBaseMenu(core, this, owner, inventory);
addMenu(editorBaseMenu);
}
/**
* Set the hat that will be edited
*
* @param hat
*/
public void setTargetHat(Hat hat) {
targetHat = hat;
}
/**
* Get the current hat being edtied
*
* @return
*/
public Hat getTargetHat() {
if (targetNode == null) {
return targetHat;
}
return targetNode;
}
/**
* Get the base hat being edited
*
* @return
*/
public Hat getBaseHat() {
return targetHat;
}
/**
* Set the node hat that will be edited
*
* @param node
*/
public void setTargetNode(Hat node) {
targetNode = node;
}
/**
* Get the current slot being edited
*
* @return
*/
public int getTargetSlot() {
return targetSlot;
}
/**
* Set the current inventory slot being edited
*
* @param slot
*/
public void setTargetSlot(int slot) {
targetSlot = slot;
}
/**
* Set the current meta argument
*
* @param argument
*/
public void setMetaArgument(String argument) {
metaArgument = argument;
}
/**
* Get the current meta argument
*
* @return
*/
public String getMetaArgument() {
return metaArgument;
}
/**
* Reset the meta argumnent to ""
*/
public void resetMetaArgument() {
metaArgument = "";
}
/**
* Returns the name of the menu being edited
*
* @return
*/
public String getMenuName() {
return editorBaseMenu.getMenuInventory().getName();
}
/**
* Clears the list of open menus and opens the base editing menu
*/
public void returnToBaseMenu() {
while (openMenus.size() > 1) {
openMenus.pollLast().onClose(true);
}
setTargetHat(null);
setTargetSlot(-1);
openMenus.getLast().open();
}
/**
* Returns the EditorBaseMenu class that is currently being edited
*
* @return
*/
public EditorBaseMenu getEditingMenu() {
return editorBaseMenu;
}
/**
* Opens the editor main menu
*/
public void openMainMenu() {
EditorMainMenu editorMainMenu = new EditorMainMenu(core, this, owner);
addMenu(editorMainMenu);
editorMainMenu.open();
}
/**
* Opens the editor settings menu
*/
public void openSettingsMenu() {
EditorSettingsMenu editorSettingsMenu = new EditorSettingsMenu(core, this, owner, editorBaseMenu);
addMenu(editorSettingsMenu);
editorSettingsMenu.open();
}
}
+129 -95
View File
@@ -12,69 +12,83 @@ import java.util.regex.Pattern;
import org.bukkit.entity.Player;
public enum MetaState {
NONE,
HAT_NAME,
HAT_LABEL,
HAT_COMMAND,
HAT_DESCRIPTION,
HAT_PERMISSION,
HAT_PERMISSION_DESCRIPTION,
HAT_PERMISSION_MESSAGE,
HAT_EQUIP_MESSAGE,
HAT_TAG,
MENU_TITLE,
MENU_ALIAS,
NEW_MENU,
BLOCK_SEARCH,
NPC_MANAGE;
NONE, HAT_NAME, HAT_LABEL, HAT_COMMAND, HAT_DESCRIPTION, HAT_PERMISSION, HAT_PERMISSION_DESCRIPTION,
HAT_PERMISSION_MESSAGE, HAT_EQUIP_MESSAGE, HAT_TAG, MENU_TITLE, MENU_ALIAS, NEW_MENU, BLOCK_SEARCH, NPC_MANAGE;
private final CosmeticsOG core = CosmeticsOG.instance;
/**
* Get the name of this MetaState
*
* @return The name of this mode as defined in the current messages.yml file
*/
public String getUsage() {
final String key = "META_" + toString() + "_USAGE";
try {
return Message.valueOf(key).getValue();
} catch (IllegalArgumentException e) {
return "";
}
}
/**
* Get the description of this MetaState
* @return The description of this mode as defined in the current messages.yml file
*
* @return The description of this mode as defined in the current messages.yml
* file
*/
public String getDescription() {
final String key = "META_" + toString() + "_DESCRIPTION";
try {
return Message.valueOf(key).getValue();
} catch (IllegalArgumentException e) {
return "";
}
}
/**
* Get the suggested value for this MetaState
*
* @return
*/
public String getSuggestion() {
final String key = "META_" + toString() + "_SUGGESTION";
try {
return Message.valueOf(key).getValue();
} catch (IllegalArgumentException e) {
return "";
}
}
public void onMetaSet(EditorMenuManager editorManager, Player player, List<String> args) {
// Stick all arguments together into one string
StringBuilder sb = new StringBuilder();
for (String s : args) {
sb.append(' ').append(s);
}
sb.deleteCharAt(0);
String value = sb.toString();
@@ -83,125 +97,145 @@ public enum MetaState {
Hat targetHat = editorManager.getBaseHat();
/**
* Solution for adding empty spaces:
* Find any %_% value and replace all _'s inside with " "
* Solution for adding empty spaces: Find any %_% value and replace all _'s
* inside with " "
*/
Pattern pattern = StringUtil.getPattern("%(.*?)%");
Matcher matcher = pattern.matcher(sb.toString());
while (matcher.find()) {
value = value.replace(matcher.group(0), matcher.group(1).replace("_", " "));
}
switch (this) {
default:
break;
case MENU_TITLE:
{
String title = value.length() <= 40 ? value : value.substring(0, 40);
editorManager.getEditingMenu().setTitle(title);
editorManager.reopen();
}
case MENU_TITLE: {
String title = value.length() <= 40 ? value : value.substring(0, 40);
editorManager.getEditingMenu().setTitle(title);
editorManager.reopen();
}
break;
case MENU_ALIAS:
{
editorManager.getEditingMenu().setAlias(Utils.stripColors(args.get(0)));
editorManager.reopen();
}
case MENU_ALIAS: {
editorManager.getEditingMenu().setAlias(Utils.stripColors(args.get(0)));
editorManager.reopen();
}
break;
case NEW_MENU:
{
String menuName =
(rawString.contains(".") ? rawString.split("\\.")[0] : rawString).replaceAll(" ", "_");
Database database = core.getDatabase();
case NEW_MENU: {
if (database.menuExists(menuName)) {
player.sendMessage(
Message.COMMAND_ERROR_MENU_EXISTS.getValue().replace("{1}", menuName));
return;
}
String menuName = (rawString.contains(".") ? rawString.split("\\.")[0] : rawString).replaceAll(" ",
"_");
Database database = core.getDatabase();
if (database.menuExists(menuName)) {
player.sendMessage(Message.COMMAND_ERROR_MENU_EXISTS.getValue().replace("{1}", menuName));
return;
database.createMenu(menuName);
editorManager.reopen();
}
database.createMenu(menuName);
editorManager.reopen();
}
break;
case HAT_NAME:
{
targetHat.setName(value);
editorManager
.getEditingMenu()
.onHatNameChange(editorManager.getBaseHat(), editorManager.getTargetSlot());
editorManager.reopen();
}
case HAT_NAME: {
targetHat.setName(value);
editorManager.getEditingMenu().onHatNameChange(editorManager.getBaseHat(),
editorManager.getTargetSlot());
editorManager.reopen();
}
break;
case HAT_PERMISSION:
{
String permission = rawString.replace(" ", "_");
targetHat.setPermission(permission.replace("particlehats.particle.", ""));
editorManager.reopen();
}
case HAT_PERMISSION: {
String permission = rawString.replace(" ", "_");
targetHat.setPermission(permission.replace("particlehats.particle.", ""));
editorManager.reopen();
}
break;
case HAT_LABEL:
{
String label = rawString.replace(" ", "_");
core.getDatabase()
.onLabelChange(targetHat.getLabel(), label, targetHat.getMenu(), targetHat.getSlot());
targetHat.setLabel(label);
editorManager.reopen();
}
case HAT_LABEL: {
String label = rawString.replace(" ", "_");
core.getDatabase().onLabelChange(targetHat.getLabel(), label, targetHat.getMenu(), targetHat.getSlot());
targetHat.setLabel(label);
editorManager.reopen();
}
break;
case HAT_EQUIP_MESSAGE:
{
targetHat.setEquipMessage(value);
editorManager.reopen();
}
case HAT_EQUIP_MESSAGE: {
targetHat.setEquipMessage(value);
editorManager.reopen();
}
break;
case HAT_PERMISSION_MESSAGE:
{
targetHat.setPermissionDeniedMessage(value);
editorManager.reopen();
}
case HAT_PERMISSION_MESSAGE: {
targetHat.setPermissionDeniedMessage(value);
editorManager.reopen();
}
break;
case HAT_DESCRIPTION:
case HAT_PERMISSION_DESCRIPTION:
{
int line = editorManager.getOwnerState().getMetaDescriptionLine();
List<String> description =
this == HAT_DESCRIPTION ? targetHat.getDescription() : targetHat.getPermissionDescription();
case HAT_PERMISSION_DESCRIPTION: {
if (line < description.size()) {
description.set(line, value);
}
int line = editorManager.getOwnerState().getMetaDescriptionLine();
List<String> description = this == HAT_DESCRIPTION ? targetHat.getDescription()
: targetHat.getPermissionDescription();
if (line < description.size()) {
description.set(line, value);
editorManager.reopen();
}
editorManager.reopen();
}
break;
case HAT_COMMAND:
{
String command = rawString;
if (rawString.charAt(0) == '/') {
command = rawString.substring(1);
}
case HAT_COMMAND: {
String command = rawString;
if (rawString.charAt(0) == '/') {
command = rawString.substring(1);
targetHat.setArgument(command);
editorManager.reopen();
}
targetHat.setArgument(command);
editorManager.reopen();
}
break;
case BLOCK_SEARCH:
{
editorManager.setMetaArgument(rawString.replace(" ", ","));
editorManager.reopen();
}
case BLOCK_SEARCH: {
editorManager.setMetaArgument(rawString.replace(" ", ","));
editorManager.reopen();
}
break;
}
}
}
@@ -28,13 +28,9 @@ public class EditorActionMenu extends AbstractListMenu {
private final List<ParticleAction> actions;
public EditorActionMenu(
CosmeticsOG core,
EditorMenuManager menuManager,
Player owner,
boolean isLeftClickAction,
boolean showHiddenActions,
MenuObjectCallback callback) {
public EditorActionMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner, boolean isLeftClickAction,
boolean showHiddenActions, MenuObjectCallback callback)
{
super(core, menuManager, owner, false);
@@ -45,37 +41,43 @@ public class EditorActionMenu extends AbstractListMenu {
this.totalPages = MathUtil.calculatePageCount(ParticleAction.values().length, 28);
this.selectAction = (event, slot) -> {
int index = getClampedIndex(slot, 10, 2);
ParticleAction action = actions.get(index);
if (action == null) {
action = ParticleAction.EQUIP;
}
callback.onSelect(action);
return MenuClickResult.NEUTRAL;
};
build();
}
public EditorActionMenu(
CosmeticsOG core,
EditorMenuManager menuManager,
Player owner,
boolean isLeftClickAction,
MenuObjectCallback callback) {
public EditorActionMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner, boolean isLeftClickAction,
MenuObjectCallback callback)
{
this(core, menuManager, owner, isLeftClickAction, false, callback);
}
@Override
public void insertEmptyItem() {}
public void insertEmptyItem() {
}
@Override
public void removeEmptyItem() {}
public void removeEmptyItem() {
}
@Override
protected void build() {
@@ -84,24 +86,29 @@ public class EditorActionMenu extends AbstractListMenu {
// Previous Page.
setAction(48, (event, slot) -> {
currentPage--;
open();
return MenuClickResult.NEUTRAL;
});
// Next Page.
setAction(50, (event, slot) -> {
currentPage++;
open();
return MenuClickResult.NEUTRAL;
});
// Fill in the actions.
for (int i = 0; i < 28; i++) {
setAction(getNormalIndex(i, 10, 2), selectAction);
}
// Create the pages.
@@ -112,11 +119,8 @@ public class EditorActionMenu extends AbstractListMenu {
String rightClick = !isLeftClickAction ? rightClickInfo[1] : "";
for (int i = 0; i < totalPages; i++) {
String titleStr = menuTitle
.replace(leftClickInfo[0], leftClick)
.replace(rightClickInfo[0], rightClick)
.replace("{3}", Integer.toString(i + 1))
.replace("{4}", Integer.toString(totalPages));
String titleStr = menuTitle.replace(leftClickInfo[0], leftClick).replace(rightClickInfo[0], rightClick)
.replace("{3}", Integer.toString(i + 1)).replace("{4}", Integer.toString(totalPages));
// Convert the title string to a colorized TextComponent using TrueOG Utils.
Component title = Utils.legacySerializerAnyCase(titleStr);
@@ -129,26 +133,21 @@ public class EditorActionMenu extends AbstractListMenu {
// Next Page.
if ((i + 1) < totalPages) {
menu.setItem(
50,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
menu.setItem(50, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
}
// Previous Page.
if ((i + 1) > 1) {
menu.setItem(
48,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
menu.setItem(48, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
}
setMenu(i, menu);
}
// Insert the actions.
@@ -161,6 +160,7 @@ public class EditorActionMenu extends AbstractListMenu {
if (action == ParticleAction.MIMIC && isLeftClickAction) {
continue;
}
if (showHiddenActions) {
@@ -168,6 +168,7 @@ public class EditorActionMenu extends AbstractListMenu {
if (!action.isHidden() && action != ParticleAction.DUMMY) {
continue;
}
} else {
@@ -175,27 +176,29 @@ public class EditorActionMenu extends AbstractListMenu {
if (action.isHidden()) {
continue;
}
}
ItemStack item =
ItemUtil.createItem(CompatibleMaterial.FIREWORK_STAR.getMaterial(), 1, action.getDisplayName());
ItemStack item = ItemUtil.createItem(CompatibleMaterial.FIREWORK_STAR.getMaterial(), 1,
action.getDisplayName());
String description = Message.EDITOR_ACTION_MENU_ACTION_DESCRIPTION.getValue();
String[] selectedInfo = StringUtil.parseValue(description, "2");
String[] selectInfo = StringUtil.parseValue(description, "3");
ParticleAction currentAction =
isLeftClickAction ? targetHat.getLeftClickAction() : targetHat.getRightClickAction();
ParticleAction currentAction = isLeftClickAction ? targetHat.getLeftClickAction()
: targetHat.getRightClickAction();
if (currentAction.equals(action)) {
ItemUtil.setItemType(item, CompatibleMaterial.GUNPOWDER);
ItemUtil.highlightItem(item);
description =
description.replace(selectedInfo[0], selectedInfo[1]).replace(selectInfo[0], "");
description = description.replace(selectedInfo[0], selectedInfo[1]).replace(selectInfo[0], "");
} else {
description = description.replace(selectInfo[0], selectInfo[1]).replace(selectedInfo[0], "");
}
description = description.replace("{1}", action.getDescription());
@@ -208,13 +211,21 @@ public class EditorActionMenu extends AbstractListMenu {
index = 0;
page++;
}
}
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -23,18 +23,20 @@ public class EditorActionMenuOverview extends AbstractStaticMenu {
private ActionClickType editingClickType = ActionClickType.NONE;
public EditorActionMenuOverview(
CosmeticsOG core, EditorMenuManager menuManager, Player owner, MenuCallback callback) {
public EditorActionMenuOverview(CosmeticsOG core, EditorMenuManager menuManager, Player owner,
MenuCallback callback)
{
super(core, menuManager, owner);
this.editorManager = menuManager;
this.callback = callback;
this.targetHat = menuManager.getBaseHat();
this.inventory = Bukkit.createInventory(
null, 27, Utils.legacySerializerAnyCase(Message.EDITOR_ACTION_OVERVIEW_MENU_TITlE.getValue()));
this.inventory = Bukkit.createInventory(null, 27,
Utils.legacySerializerAnyCase(Message.EDITOR_ACTION_OVERVIEW_MENU_TITlE.getValue()));
build();
}
@Override
@@ -45,9 +47,11 @@ public class EditorActionMenuOverview extends AbstractStaticMenu {
onActionChange(editingClickType == ActionClickType.LEFT ? true : false);
editingClickType = ActionClickType.NONE;
}
super.open();
}
@Override
@@ -55,13 +59,12 @@ public class EditorActionMenuOverview extends AbstractStaticMenu {
setButton(10, backButtonItem, backButtonAction);
ItemStack leftActionItem = ItemUtil.createItem(
CompatibleMaterial.GUNPOWDER.getMaterial(),
1,
ItemStack leftActionItem = ItemUtil.createItem(CompatibleMaterial.GUNPOWDER.getMaterial(), 1,
Message.EDITOR_ACTION_OVERVIEW_MENU_SET_LEFT_CLICK.getValue());
EditorLore.updateSpecificActionDescription(
leftActionItem, targetHat, targetHat.getLeftClickAction(), targetHat.getLeftClickArgument());
EditorLore.updateSpecificActionDescription(leftActionItem, targetHat, targetHat.getLeftClickAction(),
targetHat.getLeftClickArgument());
setButton(14, leftActionItem, (event, slot) -> {
if (event.isLeftClick()) {
openActionMenu(true);
@@ -69,18 +72,19 @@ public class EditorActionMenuOverview extends AbstractStaticMenu {
} else if (event.isRightClick()) {
openPropertiesMenu(true);
}
return MenuClickResult.NEUTRAL;
});
ItemStack rightActionItem = ItemUtil.createItem(
CompatibleMaterial.GUNPOWDER.getMaterial(),
1,
ItemStack rightActionItem = ItemUtil.createItem(CompatibleMaterial.GUNPOWDER.getMaterial(), 1,
Message.EDITOR_ACTION_OVERVIEW_MENU_SET_RIGHT_CLICK.getValue());
EditorLore.updateSpecificActionDescription(
rightActionItem, targetHat, targetHat.getRightClickAction(), targetHat.getRightClickArgument());
EditorLore.updateSpecificActionDescription(rightActionItem, targetHat, targetHat.getRightClickAction(),
targetHat.getRightClickArgument());
setButton(16, rightActionItem, (event, slot) -> {
if (event.isLeftClick()) {
openActionMenu(false);
@@ -88,24 +92,33 @@ public class EditorActionMenuOverview extends AbstractStaticMenu {
} else if (event.isRightClick()) {
openPropertiesMenu(false);
}
return MenuClickResult.NEUTRAL;
});
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
private void openActionMenu(boolean isLeftClick) {
EditorActionMenu editorActionMenu = new EditorActionMenu(core, editorManager, owner, isLeftClick, (action) -> {
if (action == null) {
return;
}
ParticleAction pa = (ParticleAction) action;
@@ -116,83 +129,101 @@ public class EditorActionMenuOverview extends AbstractStaticMenu {
} else {
targetHat.setRightClickAction(pa);
}
onActionChange(isLeftClick);
menuManager.closeCurrentMenu();
});
menuManager.addMenu(editorActionMenu);
editorActionMenu.open();
}
private void openPropertiesMenu(boolean isLeftClick) {
ParticleAction action = isLeftClick ? targetHat.getLeftClickAction() : targetHat.getRightClickAction();
switch (action) {
case OPEN_MENU_PERMISSION:
case OPEN_MENU:
{
EditorMenuSelectionMenu editorMenuSelectionMenu =
new EditorMenuSelectionMenu(core, editorManager, owner, false, (menuName) -> {
if (menuName == null) {
case OPEN_MENU: {
return;
}
EditorMenuSelectionMenu editorMenuSelectionMenu = new EditorMenuSelectionMenu(core, editorManager,
owner, false, (menuName) ->
{
String argument = (String) menuName;
if (menuName == null) {
if (isLeftClick) {
return;
targetHat.setLeftClickArgument(argument);
}
} else {
String argument = (String) menuName;
targetHat.setRightClickArgument(argument);
}
if (isLeftClick) {
menuManager.closeCurrentMenu();
onActionChange(isLeftClick);
});
targetHat.setLeftClickArgument(argument);
menuManager.addMenu(editorMenuSelectionMenu);
editorMenuSelectionMenu.open();
}
} else {
targetHat.setRightClickArgument(argument);
}
menuManager.closeCurrentMenu();
onActionChange(isLeftClick);
});
menuManager.addMenu(editorMenuSelectionMenu);
editorMenuSelectionMenu.open();
}
break;
case COMMAND:
{
if (isLeftClick) {
case COMMAND: {
editingClickType = ActionClickType.LEFT;
if (isLeftClick) {
} else {
editingClickType = ActionClickType.LEFT;
editingClickType = ActionClickType.RIGHT;
}
} else {
editingClickType = ActionClickType.RIGHT;
targetHat.setEditingAction(isLeftClick ? 1 : 2);
editorManager.getOwnerState().setMetaState(MetaState.HAT_COMMAND);
core.prompt(owner, MetaState.HAT_COMMAND);
menuManager.closeInventory();
}
targetHat.setEditingAction(isLeftClick ? 1 : 2);
editorManager.getOwnerState().setMetaState(MetaState.HAT_COMMAND);
core.prompt(owner, MetaState.HAT_COMMAND);
menuManager.closeInventory();
}
break;
case DEMO:
{
EditorDurationMenu editorDurationMenu = new EditorDurationMenu(core, editorManager, owner, () -> {
onActionChange(isLeftClick);
});
case DEMO: {
menuManager.addMenu(editorDurationMenu);
editorDurationMenu.open();
}
EditorDurationMenu editorDurationMenu = new EditorDurationMenu(core, editorManager, owner, () -> {
onActionChange(isLeftClick);
});
menuManager.addMenu(editorDurationMenu);
editorDurationMenu.open();
}
break;
default:
break;
}
}
/**
* Called any time an action is changed
*
* @param isLeftClick
*/
public void onActionChange(boolean isLeftClick) {
@@ -204,11 +235,11 @@ public class EditorActionMenuOverview extends AbstractStaticMenu {
EditorLore.updateSpecificActionDescription(item, targetHat, action, argument);
callback.onCallback();
}
private enum ActionClickType {
NONE,
LEFT,
RIGHT;
NONE, LEFT, RIGHT;
}
}
@@ -26,10 +26,11 @@ public class EditorAngleMenu extends AbstractStaticMenu {
this.editorManager = menuManager;
this.callback = callback;
this.inventory = Bukkit.createInventory(
null, 27, Utils.legacySerializerAnyCase(Message.EDITOR_ANGLE_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 27,
Utils.legacySerializerAnyCase(Message.EDITOR_ANGLE_MENU_TITLE.getValue()));
build();
}
@Override
@@ -38,31 +39,38 @@ public class EditorAngleMenu extends AbstractStaticMenu {
Hat targetHat = editorManager.getTargetHat();
// X Angle.
ItemStack xItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_ANGLE_MENU_SET_ANGLE_X.getValue());
ItemStack xItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_ANGLE_MENU_SET_ANGLE_X.getValue());
EditorLore.updateVectorDescription(xItem, targetHat.getAngle(), Message.EDITOR_ANGLE_MENU_ANGLE_X_DESCRIPTION);
setButton(14, xItem, (event, slot) -> {
return updateAngle(event, targetHat, VectorAxis.X);
});
// Y Angle.
ItemStack yItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_ANGLE_MENU_SET_ANGLE_Y.getValue());
ItemStack yItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_ANGLE_MENU_SET_ANGLE_Y.getValue());
EditorLore.updateVectorDescription(yItem, targetHat.getAngle(), Message.EDITOR_ANGLE_MENU_ANGLE_Y_DESCRIPTION);
setButton(15, yItem, (event, slot) -> {
return updateAngle(event, targetHat, VectorAxis.Y);
});
// Z Angle.
ItemStack zItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_ANGLE_MENU_SET_ANGLE_Z.getValue());
ItemStack zItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_ANGLE_MENU_SET_ANGLE_Z.getValue());
EditorLore.updateVectorDescription(zItem, targetHat.getAngle(), Message.EDITOR_ANGLE_MENU_ANGLE_Z_DESCRIPTION);
setButton(16, zItem, (event, slot) -> {
return updateAngle(event, targetHat, VectorAxis.Z);
});
// Back.
setButton(10, backButtonItem, backButtonAction);
}
@Override
@@ -71,11 +79,15 @@ public class EditorAngleMenu extends AbstractStaticMenu {
if (!forced) {
callback.onCallback();
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
private MenuClickResult updateAngle(MenuClickEvent event, Hat hat, VectorAxis axis) {
@@ -86,6 +98,7 @@ public class EditorAngleMenu extends AbstractStaticMenu {
Vector angle = hat.getAngle();
switch (axis) {
case X:
double xa = !isMiddleClick ? angle.getX() + modifier : 0;
@@ -104,6 +117,7 @@ public class EditorAngleMenu extends AbstractStaticMenu {
hat.setAngleZ(za);
break;
}
EditorLore.updateVectorDescription(getItem(14), angle, Message.EDITOR_ANGLE_MENU_ANGLE_X_DESCRIPTION);
@@ -117,6 +131,9 @@ public class EditorAngleMenu extends AbstractStaticMenu {
} else {
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
}
}
}
@@ -44,16 +44,16 @@ public class EditorBaseMenu extends AbstractStaticMenu {
this.editorManager = (EditorMenuManager) menuManager;
this.menuInventory = menuInventory;
this.rows = menuInventory.getSize() / 9;
this.emptyItem = ItemUtil.createItem(
CompatibleMaterial.LIGHT_GRAY_STAINED_GLASS_PANE.getMaterial(),
this.emptyItem = ItemUtil.createItem(CompatibleMaterial.LIGHT_GRAY_STAINED_GLASS_PANE.getMaterial(),
Message.EDITOR_EMPTY_SLOT_TITLE.getValue(),
StringUtil.parseDescription(Message.EDITOR_SLOT_DESCRIPTION.getValue()));
this.editingTitle = EditorLore.getTrimmedMenuTitle(menuInventory.getName(), Message.EDITOR_BASE_MENU_TITLE);
this.inventory =
Bukkit.createInventory(null, menuInventory.getSize(), Utils.legacySerializerAnyCase(editingTitle));
this.inventory = Bukkit.createInventory(null, menuInventory.getSize(),
Utils.legacySerializerAnyCase(editingTitle));
this.inventory.setContents(menuInventory.getContents());
emptyParticleAction = (event, slot) -> {
if (event.isLeftClick()) {
editorManager.setTargetHat(createHat(slot));
@@ -63,12 +63,15 @@ public class EditorBaseMenu extends AbstractStaticMenu {
} else if (event.isRightClick()) {
editorManager.openSettingsMenu();
}
return MenuClickResult.NEUTRAL;
};
existingParticleAction = (event, slot) -> {
if (event.isLeftClick()) {
editorManager.setTargetHat(menuInventory.getHat(slot));
@@ -84,12 +87,15 @@ public class EditorBaseMenu extends AbstractStaticMenu {
} else if (event.isRightClick()) {
editorManager.openSettingsMenu();
}
return MenuClickResult.NEUTRAL;
};
build();
}
@Override
@@ -101,15 +107,18 @@ public class EditorBaseMenu extends AbstractStaticMenu {
super.open();
return;
}
Hat hat = menuInventory.getHat(slot);
if (hat != null) {
EditorLore.updateHatDescription(getItem(slot), hat, true);
}
super.open();
}
@Override
@@ -124,20 +133,26 @@ public class EditorBaseMenu extends AbstractStaticMenu {
} else {
setAction(i, existingParticleAction);
}
Hat hat = menuInventory.getHat(i);
if (hat == null) {
continue;
}
EditorLore.updateHatDescription(inventory.getItem(i), hat, true);
}
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {
@@ -152,37 +167,46 @@ public class EditorBaseMenu extends AbstractStaticMenu {
if (hat == null) {
continue;
}
IconData iconData = hat.getIconData();
if (!iconData.isLive()) {
continue;
}
ItemStackTemplate itemTemplate = iconData.getNextItem(ticks);
ItemUtil.setItemType(getItem(slot), itemTemplate.getMaterial(), itemTemplate.getDurability());
}
}
}
@Override
public String getName() {
return menuInventory.getName();
}
/**
* Removes the hat at this slot
*
* @param slot
*/
public void removeHat(int slot) {
menuInventory.removeHat(slot);
}
/**
* Removes the hat and item at this slot
*
* @param slot
*/
public void removeButton(int slot) {
@@ -190,36 +214,42 @@ public class EditorBaseMenu extends AbstractStaticMenu {
removeHat(slot);
setButton(slot, emptyItem, emptyParticleAction);
}
/**
* Get this menus MenuInventory
*
* @return
*/
public MenuInventory getMenuInventory() {
return menuInventory;
}
/**
* Set this menu's title
*
* @param title
*/
public void setTitle(String title) {
menuInventory.setTitle(Utils.legacySerializerAnyCase(title));
Inventory replacementInventory =
Bukkit.createInventory(null, inventory.getSize(), Utils.legacySerializerAnyCase(editingTitle));
Inventory replacementInventory = Bukkit.createInventory(null, inventory.getSize(),
Utils.legacySerializerAnyCase(editingTitle));
replacementInventory.setContents(inventory.getContents());
inventory = replacementInventory;
core.getDatabase().saveMenuTitle(getName(), title);
}
/**
* Set this menu's alias
*
* @param alias
*/
public void setAlias(String alias) {
@@ -227,6 +257,7 @@ public class EditorBaseMenu extends AbstractStaticMenu {
menuInventory.setAlias(alias);
core.getDatabase().saveMenuAlias(getName(), alias);
}
/**
@@ -247,11 +278,14 @@ public class EditorBaseMenu extends AbstractStaticMenu {
Damageable damageable = (Damageable) meta;
damage = damageable.getDamage();
}
}
// Call the ItemUtil method to update the item type and its damage
ItemUtil.setItemType(getItem(slot), material, damage);
}
/**
@@ -260,24 +294,29 @@ public class EditorBaseMenu extends AbstractStaticMenu {
public void toggleUpdates() {
canUpdate = !canUpdate;
}
/**
* Checks to see if this menu can update icons
*
* @return
*/
public boolean canUpdate() {
return canUpdate;
}
/**
* Get how many rows this inventory has
*
* @return
*/
public int rows() {
return rows;
}
/**
@@ -288,17 +327,20 @@ public class EditorBaseMenu extends AbstractStaticMenu {
for (Entry<Integer, Hat> hats : menuInventory.getHats().entrySet()) {
hats.getValue().getIconData().reset();
}
}
public void resizeTo(int rows) {
if (this.rows != rows) {
Inventory replacementInventory =
Bukkit.createInventory(null, (9 * rows), Utils.legacySerializerAnyCase(editingTitle));
Inventory replacementInventory = Bukkit.createInventory(null, (9 * rows),
Utils.legacySerializerAnyCase(editingTitle));
// inventory.setContents() only works when resizing the menus to a smaller size. So, we need to use a loop
// inventory.setContents() only works when resizing the menus to a smaller size.
// So, we need to use a loop
// to account for the other option.
for (int i = 0; i < replacementInventory.getSize(); i++) {
@@ -307,7 +349,9 @@ public class EditorBaseMenu extends AbstractStaticMenu {
replacementInventory.setItem(i, inventory.getItem(i));
} catch (ArrayIndexOutOfBoundsException error) {
}
}
// Fill in any empty slots.
@@ -316,7 +360,9 @@ public class EditorBaseMenu extends AbstractStaticMenu {
for (int i = inventory.getSize(); i < replacementInventory.getSize(); i++) {
replacementInventory.setItem(i, emptyItem);
}
}
inventory = replacementInventory;
@@ -324,7 +370,9 @@ public class EditorBaseMenu extends AbstractStaticMenu {
this.rows = rows;
core.getDatabase().saveMenuSize(getName(), rows);
}
}
public void changeSlots(int currentSlot, int newSlot, boolean swapping) {
@@ -348,6 +396,7 @@ public class EditorBaseMenu extends AbstractStaticMenu {
} else {
menuInventory.removeHat(currentSlot);
}
setButton(currentSlot, swappingItem, swappingAction);
@@ -357,10 +406,12 @@ public class EditorBaseMenu extends AbstractStaticMenu {
editorManager.setTargetSlot(newSlot);
core.getDatabase().moveHat(currentHat, swappingHat, getName(), null, currentSlot, newSlot, swapping);
}
/**
* Clones a hat and adds it to the new slot
*
* @param currentSlot
* @param newSlot
*/
@@ -378,20 +429,24 @@ public class EditorBaseMenu extends AbstractStaticMenu {
EditorLore.updateHatDescription(getItem(newSlot), clonedHat, true);
core.getDatabase().cloneHat(getName(), currentHat, newSlot);
}
/**
* Updates the item's display name that belongs in this slot
*
* @param hat
* @param slot
*/
public void onHatNameChange(Hat hat, int slot) {
ItemUtil.setItemName(getItem(slot), hat.getDisplayName());
}
/**
* Creates and returns a new hat object
*
* @param slot
* @return
*/
@@ -402,8 +457,8 @@ public class EditorBaseMenu extends AbstractStaticMenu {
hat.setSlot(slot);
hat.setLoaded(true);
ItemStack emptyItem = ItemUtil.createItem(
CompatibleMaterial.SUNFLOWER.getMaterial(), 1, Message.EDITOR_MISC_NEW_PARTICLE.getValue());
ItemStack emptyItem = ItemUtil.createItem(CompatibleMaterial.SUNFLOWER.getMaterial(), 1,
Message.EDITOR_MISC_NEW_PARTICLE.getValue());
EditorLore.updateHatDescription(emptyItem, hat, true);
@@ -413,10 +468,12 @@ public class EditorBaseMenu extends AbstractStaticMenu {
core.getDatabase().createHat(menuInventory.getName(), hat);
return hat;
}
/**
* Deletes the hat in the current slot
*
* @param slot
*/
private void deleteHat(int slot) {
@@ -425,5 +482,7 @@ public class EditorBaseMenu extends AbstractStaticMenu {
menuInventory.removeHat(slot);
core.getDatabase().deleteHat(menuInventory.getName(), slot);
}
}
@@ -29,8 +29,9 @@ public class EditorColorMenu extends AbstractStaticMenu {
private Map<Integer, Color> colors;
public EditorColorMenu(
CosmeticsOG core, EditorMenuManager menuManager, Player owner, int particleIndex, MenuCallback callback) {
public EditorColorMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner, int particleIndex,
MenuCallback callback)
{
super(core, menuManager, owner);
@@ -38,22 +39,26 @@ public class EditorColorMenu extends AbstractStaticMenu {
this.targetHat = menuManager.getTargetHat();
this.callback = callback;
this.colors = new HashMap<Integer, Color>();
this.inventory = Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_COLOUR_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_COLOUR_MENU_TITLE.getValue()));
this.setColorAction = (event, slot) -> {
if (colors.containsKey(slot)) {
ColorData colorData = targetHat.getParticleData(particleIndex).getColorData();
colorData.setColor(colors.get(slot));
menuManager.closeCurrentMenu();
}
return MenuClickResult.NEUTRAL;
};
build();
}
@Override
@@ -63,46 +68,50 @@ public class EditorColorMenu extends AbstractStaticMenu {
for (int i = 0; i < 15; i++) {
setAction(getNormalIndex(i, 10, 4), setColorAction);
}
ColorData colorData = targetHat.getParticleData(particleIndex).getColorData();
Color color = colorData.getColor();
ItemStack redItem = ItemUtil.createItem(
CompatibleMaterial.ROSE_RED.getMaterial(), 1, Message.EDITOR_COLOUR_MENU_SET_RED_VALUE.getValue());
EditorLore.updateColorDescription(
redItem, color, colorData.isRandom(), Message.EDITOR_COLOUR_MENU_R_DESCRIPTION);
ItemStack redItem = ItemUtil.createItem(CompatibleMaterial.ROSE_RED.getMaterial(), 1,
Message.EDITOR_COLOUR_MENU_SET_RED_VALUE.getValue());
EditorLore.updateColorDescription(redItem, color, colorData.isRandom(),
Message.EDITOR_COLOUR_MENU_R_DESCRIPTION);
setButton(16, redItem, (event, slot) -> {
return updateRGB(event, targetHat, RGB.R);
});
ItemStack greenItem = ItemUtil.createItem(
CompatibleMaterial.CACTUS_GREEN.getMaterial(),
1,
ItemStack greenItem = ItemUtil.createItem(CompatibleMaterial.CACTUS_GREEN.getMaterial(), 1,
Message.EDITOR_COLOUR_MENU_SET_GREEN_VALUE.getValue());
EditorLore.updateColorDescription(
greenItem, color, colorData.isRandom(), Message.EDITOR_COLOUR_MENU_G_DESCRIPTION);
EditorLore.updateColorDescription(greenItem, color, colorData.isRandom(),
Message.EDITOR_COLOUR_MENU_G_DESCRIPTION);
setButton(25, greenItem, (event, slot) -> {
return updateRGB(event, targetHat, RGB.G);
});
ItemStack blueItem = ItemUtil.createItem(
CompatibleMaterial.LAPIS_LAZULI.getMaterial(), 1, Message.EDITOR_COLOUR_MENU_SET_BLUE_VALUE.getValue());
EditorLore.updateColorDescription(
blueItem, color, colorData.isRandom(), Message.EDITOR_COLOUR_MENU_B_DESCRIPTION);
ItemStack blueItem = ItemUtil.createItem(CompatibleMaterial.LAPIS_LAZULI.getMaterial(), 1,
Message.EDITOR_COLOUR_MENU_SET_BLUE_VALUE.getValue());
EditorLore.updateColorDescription(blueItem, color, colorData.isRandom(),
Message.EDITOR_COLOUR_MENU_B_DESCRIPTION);
setButton(34, blueItem, (event, slot) -> {
return updateRGB(event, targetHat, RGB.B);
});
// Only enable particle scaling in 1.13+, 1.12- does not support the feature
if (CosmeticsOG.serverVersion >= 13) {
ItemStack sizeItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_COLOUR_MENU_SET_SIZE.getValue());
EditorLore.updateDoubleDescription(
sizeItem,
targetHat.getParticleData(particleIndex).getScale(),
ItemStack sizeItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_COLOUR_MENU_SET_SIZE.getValue());
EditorLore.updateDoubleDescription(sizeItem, targetHat.getParticleData(particleIndex).getScale(),
Message.EDITOR_COLOUR_MENU_SIZE_DESCRIPTION);
setButton(50, sizeItem, (event, slot) -> {
double normal = event.isLeftClick() ? 0.1 : -0.1;
double shift = event.isShiftClick() ? 0.1 : 1;
double modifier = normal * shift;
@@ -111,18 +120,20 @@ public class EditorColorMenu extends AbstractStaticMenu {
double size = data.getScale() + modifier;
data.setScale(size);
EditorLore.updateDoubleDescription(
getItem(50), data.getScale(), Message.EDITOR_COLOUR_MENU_SIZE_DESCRIPTION);
EditorLore.updateDoubleDescription(getItem(50), data.getScale(),
Message.EDITOR_COLOUR_MENU_SIZE_DESCRIPTION);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
}
ItemStack randomItem = ItemUtil.createItem(
CompatibleMaterial.EXPERIENCE_BOTTLE.getMaterial(),
ItemStack randomItem = ItemUtil.createItem(CompatibleMaterial.EXPERIENCE_BOTTLE.getMaterial(),
Message.EDITOR_COLOUR_MENU_SET_RANDOM.getValue(),
StringUtil.parseDescription(Message.EDITOR_COLOUR_MENU_RANDOM_DESCRIPTION.getValue()));
setButton(51, randomItem, (event, slot) -> {
targetHat.getParticleData(particleIndex).getColorData().setRandom(true);
EditorLore.updateColorDescription(getItem(16), color, true, Message.EDITOR_COLOUR_MENU_R_DESCRIPTION);
@@ -130,6 +141,7 @@ public class EditorColorMenu extends AbstractStaticMenu {
EditorLore.updateColorDescription(getItem(34), color, true, Message.EDITOR_COLOUR_MENU_B_DESCRIPTION);
return MenuClickResult.NEUTRAL;
});
setColor(10, Color.fromRGB(255, 255, 255), "WHITE");
@@ -149,6 +161,7 @@ public class EditorColorMenu extends AbstractStaticMenu {
setColor(30, Color.fromRGB(165, 42, 42), "BROWN");
setColor(31, Color.fromRGB(160, 32, 219), "PURPLE");
setColor(32, Color.fromRGB(0, 255, 255), "CYAN");
}
@Override
@@ -157,41 +170,44 @@ public class EditorColorMenu extends AbstractStaticMenu {
if (!forced) {
callback.onCallback();
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
private void setColor(int slot, Color color, String colorName) {
String title = Message.fromString("EDITOR_COLOUR_MENU_SET_" + colorName).getValue();
CompatibleMaterial material = CompatibleMaterial.fromName(
colorName + "_STAINED_GLASS_PANE", CompatibleMaterial.BLACK_STAINED_GLASS_PANE);
CompatibleMaterial material = CompatibleMaterial.fromName(colorName + "_STAINED_GLASS_PANE",
CompatibleMaterial.BLACK_STAINED_GLASS_PANE);
setColor(slot, color);
setItem(
slot,
ItemUtil.createItem(
material.getMaterial(), title, StringUtil.parseDescription(getColorDescription(color, title))));
setItem(slot, ItemUtil.createItem(material.getMaterial(), title,
StringUtil.parseDescription(getColorDescription(color, title))));
}
private void setColor(int slot, Color color) {
colors.put(slot, color);
}
private String getColorDescription(Color color, String title) {
String description = Message.EDITOR_COLOUR_MENU_PRESET_DESCRIPTION.getValue();
String s = description
.replace("{1}", Utils.stripColors(title.toLowerCase()))
.replace("{2}", Integer.toString(color.getRed()))
.replace("{3}", Integer.toString(color.getGreen()))
String s = description.replace("{1}", Utils.stripColors(title.toLowerCase()))
.replace("{2}", Integer.toString(color.getRed())).replace("{3}", Integer.toString(color.getGreen()))
.replace("{4}", Integer.toString(color.getBlue()));
return s;
}
private MenuClickResult updateRGB(MenuClickEvent event, Hat hat, RGB rgb) {
@@ -206,6 +222,7 @@ public class EditorColorMenu extends AbstractStaticMenu {
pc.setRandom(false);
switch (rgb) {
case R:
int r = MathUtil.clamp(color.getRed() + modifier, 0, 255);
@@ -224,6 +241,7 @@ public class EditorColorMenu extends AbstractStaticMenu {
color = color.setBlue(b);
break;
}
EditorLore.updateColorDescription(getItem(16), color, false, Message.EDITOR_COLOUR_MENU_R_DESCRIPTION);
@@ -233,11 +251,11 @@ public class EditorColorMenu extends AbstractStaticMenu {
hat.getParticleData(particleIndex).getColorData().setColor(color);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
}
private enum RGB {
R,
G,
B;
R, G, B;
}
}
@@ -21,36 +21,47 @@ public class EditorDeleteMenu extends AbstractStaticMenu {
super(core, menuManager, owner);
this.editorBaseMenu = editorBaseMenu;
this.inventory = Bukkit.createInventory(
null, 27, Utils.legacySerializerAnyCase(Message.EDITOR_DELETE_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 27,
Utils.legacySerializerAnyCase(Message.EDITOR_DELETE_MENU_TITLE.getValue()));
build();
}
@Override
protected void build() {
ItemStack yesItem = ItemUtil.createItem(
CompatibleMaterial.ROSE_RED.getMaterial(), 1, Message.EDITOR_DELETE_MENU_YES.getValue());
ItemStack yesItem = ItemUtil.createItem(CompatibleMaterial.ROSE_RED.getMaterial(), 1,
Message.EDITOR_DELETE_MENU_YES.getValue());
setButton(12, yesItem, (event, slot) -> {
core.getDatabase().deleteMenu(editorBaseMenu.getMenuInventory().getName());
menuManager.closeInventory();
return MenuClickResult.NEUTRAL;
});
ItemStack noItem = ItemUtil.createItem(Material.COAL, 1, Message.EDITOR_DELETE_MENU_NO.getValue());
setButton(14, noItem, (event, slot) -> {
menuManager.closeCurrentMenu();
return MenuClickResult.NEUTRAL;
});
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -25,8 +25,8 @@ public class EditorDescriptionMenu extends AbstractListMenu {
private final boolean isEditingDescription;
private final Hat targetHat;
private final ItemStack emptyItem = ItemUtil.createItem(
CompatibleMaterial.BARRIER.getMaterial(), 1, Message.EDITOR_DESCRIPTION_MENU_EMPTY.getValue());
private final ItemStack emptyItem = ItemUtil.createItem(CompatibleMaterial.BARRIER.getMaterial(), 1,
Message.EDITOR_DESCRIPTION_MENU_EMPTY.getValue());
private final String lineTitle = Message.EDITOR_DESCIPRION_LINE_TITLE.getValue();
private final String lineDescription = Message.EDITOR_DESCRIPTION_MENU_LINE_DESCRIPTION.getValue();
@@ -35,8 +35,9 @@ public class EditorDescriptionMenu extends AbstractListMenu {
private int editingLine = -1;
private boolean isModified = false;
public EditorDescriptionMenu(
CosmeticsOG core, EditorMenuManager menuManager, Player owner, boolean isEditingDescription) {
public EditorDescriptionMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner,
boolean isEditingDescription)
{
super(core, menuManager, owner, true);
@@ -45,24 +46,25 @@ public class EditorDescriptionMenu extends AbstractListMenu {
this.targetHat = menuManager.getBaseHat();
this.totalPages = 1;
setMenu(
0,
Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_DESCRIPTION_MENU_TITLE.getValue())));
setMenu(0, Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_DESCRIPTION_MENU_TITLE.getValue())));
build();
}
@Override
public void insertEmptyItem() {
setButton(0, 22, emptyItem, emptyAction);
}
@Override
public void removeEmptyItem() {
setButton(0, 22, null, emptyAction);
}
@Override
@@ -79,9 +81,11 @@ public class EditorDescriptionMenu extends AbstractListMenu {
editingLine = -1;
EditorLore.updatePreviewDecription(getItem(0, 49), description, targetHat);
}
super.open();
}
@Override
@@ -89,10 +93,11 @@ public class EditorDescriptionMenu extends AbstractListMenu {
setButton(0, 46, backButtonItem, backButtonAction);
ItemStack previewItem = ItemUtil.createItem(
CompatibleMaterial.WRITABLE_BOOK.getMaterial(), 1, Message.EDITOR_DESCRIPTION_MENU_PREVIEW.getValue());
ItemStack previewItem = ItemUtil.createItem(CompatibleMaterial.WRITABLE_BOOK.getMaterial(), 1,
Message.EDITOR_DESCRIPTION_MENU_PREVIEW.getValue());
EditorLore.updatePreviewDecription(previewItem, getDescription(), targetHat);
setButton(0, 49, previewItem, (event, slot) -> {
if (event.isShiftRightClick()) {
getDescription().clear();
@@ -100,6 +105,7 @@ public class EditorDescriptionMenu extends AbstractListMenu {
for (int i = 0; i <= 27; i++) {
setItem(0, getNormalIndex(i, 10, 2), null);
}
setEmpty(true);
@@ -109,36 +115,42 @@ public class EditorDescriptionMenu extends AbstractListMenu {
isModified = true;
return MenuClickResult.NEGATIVE;
}
return MenuClickResult.NONE;
});
// Add Line.
ItemStack addItem = ItemUtil.createItem(
CompatibleMaterial.TURTLE_HELMET.getMaterial(), 1, Message.EDITOR_DESCRIPTION_MENU_ADD_LINE.getValue());
ItemStack addItem = ItemUtil.createItem(CompatibleMaterial.TURTLE_HELMET.getMaterial(), 1,
Message.EDITOR_DESCRIPTION_MENU_ADD_LINE.getValue());
setButton(0, 52, addItem, (event, slot) -> {
List<String> description = getDescription();
int size = description.size();
if (size <= 27) {
ItemStack item =
ItemUtil.createItem(Material.PAPER, 1, lineTitle.replace("{1}", Integer.toString(size + 1)));
ItemStack item = ItemUtil.createItem(Material.PAPER, 1,
lineTitle.replace("{1}", Integer.toString(size + 1)));
description.add("");
EditorLore.updatePreviewDecription(getItem(0, 49), getDescription(), targetHat);
setLineDescription(item, "");
setItem(0, getNormalIndex(size, 10, 2), item);
}
setEmpty(false);
isModified = true;
return MenuClickResult.NEUTRAL;
});
final MenuAction editAction = (event, slot) -> {
if (event.isLeftClick()) {
if (event.isShiftClick()) {
@@ -146,13 +158,14 @@ public class EditorDescriptionMenu extends AbstractListMenu {
onInsert(slot);
return MenuClickResult.NEUTRAL;
}
editingLine = getClampedIndex(slot, 10, 2);
editorManager.getOwnerState().setMetaDescriptionLine(editingLine);
MetaState metaState =
isEditingDescription ? MetaState.HAT_DESCRIPTION : MetaState.HAT_PERMISSION_DESCRIPTION;
MetaState metaState = isEditingDescription ? MetaState.HAT_DESCRIPTION
: MetaState.HAT_PERMISSION_DESCRIPTION;
editorManager.getOwnerState().setMetaState(metaState);
core.prompt(owner, metaState);
@@ -167,14 +180,17 @@ public class EditorDescriptionMenu extends AbstractListMenu {
isModified = true;
return MenuClickResult.NEGATIVE;
}
return MenuClickResult.NEUTRAL;
};
for (int i = 0; i < 28; i++) {
setAction(getNormalIndex(i, 10, 2), editAction);
}
List<String> description = getDescription();
@@ -184,17 +200,20 @@ public class EditorDescriptionMenu extends AbstractListMenu {
setEmpty(true);
return;
}
for (int i = 0; i < description.size(); i++) {
ItemStack lineItem =
ItemUtil.createItem(Material.PAPER, 1, lineTitle.replace("{1}", Integer.toString(i + 1)));
ItemStack lineItem = ItemUtil.createItem(Material.PAPER, 1,
lineTitle.replace("{1}", Integer.toString(i + 1)));
String line = description.get(i);
setLineDescription(lineItem, line);
setItem(0, getNormalIndex(i, 10, 2), lineItem);
}
}
@Override
@@ -207,11 +226,15 @@ public class EditorDescriptionMenu extends AbstractListMenu {
String menuName = editorManager.getMenuName();
database.saveMetaData(menuName, targetHat, type, 0);
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
@Override
public void deleteSlot(int page, int slot) {
@@ -227,28 +250,35 @@ public class EditorDescriptionMenu extends AbstractListMenu {
if (item == null) {
continue;
}
ItemUtil.setItemName(item, lineTitle.replace("{1}", Integer.toString(i + 1)));
}
if (getDescription().size() == 0) {
setEmpty(true);
}
}
/**
* Get the hat's description depending on the <b>isEditingDescription</b> value
*
* @return
*/
private List<String> getDescription() {
return isEditingDescription ? targetHat.getDescription() : targetHat.getPermissionDescription();
}
/**
* Adds a line to this item's description
*
* @param item
* @param line
*/
@@ -258,12 +288,14 @@ public class EditorDescriptionMenu extends AbstractListMenu {
if (!line.isEmpty() && line.charAt(0) != '&') {
prefix = "&5&o";
}
String s = line.equals("") ? descriptionInfo[1] : prefix + line;
String d = lineDescription.replace(descriptionInfo[0], s);
ItemUtil.setItemDescription(item, StringUtil.parseDescription(d));
}
private void onInsert(int slot) {
@@ -285,14 +317,18 @@ public class EditorDescriptionMenu extends AbstractListMenu {
setItem(0, fromSlot, null);
setItem(0, toSlot, item);
}
ItemStack item =
ItemUtil.createItem(Material.PAPER, 1, lineTitle.replace("{1}", Integer.toString(index + 1)));
ItemStack item = ItemUtil.createItem(Material.PAPER, 1,
lineTitle.replace("{1}", Integer.toString(index + 1)));
EditorLore.updatePreviewDecription(getItem(0, 49), getDescription(), targetHat);
setLineDescription(item, "");
setItem(0, getNormalIndex(index, 10, 2), item);
}
}
}
@@ -24,10 +24,11 @@ public class EditorDurationMenu extends AbstractStaticMenu {
this.targetHat = menuManager.getBaseHat();
this.callback = callback;
this.inventory = Bukkit.createInventory(
null, 27, Utils.legacySerializerAnyCase(Message.EDITOR_DURATION_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 27,
Utils.legacySerializerAnyCase(Message.EDITOR_DURATION_MENU_TITLE.getValue()));
build();
}
@Override
@@ -35,11 +36,12 @@ public class EditorDurationMenu extends AbstractStaticMenu {
setButton(12, backButtonItem, backButtonAction);
ItemStack durationItem =
ItemUtil.createItem(Material.MAP, 1, Message.EDITOR_DURATION_MENU_SET_DURATION.getValue());
EditorLore.updateDurationDescription(
durationItem, targetHat.getDemoDuration(), Message.EDITOR_DURATION_MENU_DESCRIPTION);
ItemStack durationItem = ItemUtil.createItem(Material.MAP, 1,
Message.EDITOR_DURATION_MENU_SET_DURATION.getValue());
EditorLore.updateDurationDescription(durationItem, targetHat.getDemoDuration(),
Message.EDITOR_DURATION_MENU_DESCRIPTION);
setButton(14, durationItem, (event, slot) -> {
int normalClick = event.isLeftClick() ? 20 : -20;
int shiftClick = event.isShiftClick() ? 30 : 1;
int modifier = normalClick * shiftClick;
@@ -47,11 +49,13 @@ public class EditorDurationMenu extends AbstractStaticMenu {
targetHat.setDemoDuration(duration);
EditorLore.updateDurationDescription(
getItem(14), targetHat.getDemoDuration(), Message.EDITOR_DURATION_MENU_DESCRIPTION);
EditorLore.updateDurationDescription(getItem(14), targetHat.getDemoDuration(),
Message.EDITOR_DURATION_MENU_DESCRIPTION);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
}
@Override
@@ -60,9 +64,14 @@ public class EditorDurationMenu extends AbstractStaticMenu {
if (!forced) {
callback.onCallback();
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -38,8 +38,9 @@ public class EditorIconMenuOverview extends AbstractListMenu {
private final Message iconName = Message.EDITOR_ICON_MENU_ITEM_INFO;
private final Message iconDescription = Message.EDITOR_ICON_MENU_ITEM_DESCRIPTION;
public EditorIconMenuOverview(
CosmeticsOG core, EditorMenuManager menuManager, Player owner, MenuObjectCallback callback) {
public EditorIconMenuOverview(CosmeticsOG core, EditorMenuManager menuManager, Player owner,
MenuObjectCallback callback)
{
super(core, menuManager, owner, true);
@@ -48,19 +49,22 @@ public class EditorIconMenuOverview extends AbstractListMenu {
this.targetHat = editorManager.getBaseHat();
this.totalPages = 1;
setMenu(
0,
Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_ICON_OVERVIEW_MENU_TITLE.getValue())));
setMenu(0, Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_ICON_OVERVIEW_MENU_TITLE.getValue())));
build();
}
@Override
public void insertEmptyItem() {}
public void insertEmptyItem() {
}
@Override
public void removeEmptyItem() {}
public void removeEmptyItem() {
}
@Override
protected void build() {
@@ -71,15 +75,19 @@ public class EditorIconMenuOverview extends AbstractListMenu {
ItemStack mainItem = targetHat.getItem();
ItemUtil.setItemName(mainItem, Message.EDITOR_ICON_MENU_SET_MAIN_ICON);
setButton(0, 10, mainItem, (event, slot) -> {
editingIndex = 0;
EditorItemPromptMenu editorItemPromptMenu = new EditorItemPromptMenu(
core, editorManager, owner, iconTitle, iconName, iconDescription, (item) -> {
EditorItemPromptMenu editorItemPromptMenu = new EditorItemPromptMenu(core, editorManager, owner, iconTitle,
iconName, iconDescription, (item) ->
{
editorManager.closeCurrentMenu();
if (item == null) {
return;
}
ItemStack i = ((ItemStack) item).clone();
@@ -96,6 +104,7 @@ public class EditorIconMenuOverview extends AbstractListMenu {
Damageable meta = (Damageable) i.getItemMeta();
durability = meta.getDamage();
}
// Set the item type with the correct material and durability.
@@ -105,6 +114,7 @@ public class EditorIconMenuOverview extends AbstractListMenu {
targetHat.setItem(i);
isModified = true;
});
menuManager.addMenu(editorItemPromptMenu);
@@ -112,68 +122,70 @@ public class EditorIconMenuOverview extends AbstractListMenu {
editorItemPromptMenu.open();
return MenuClickResult.NEUTRAL;
});
// Preview Icon.
setItem(
0,
48,
ItemUtil.createItem(
CompatibleMaterial.SUNFLOWER.getMaterial(), 1, Message.EDITOR_ICON_MENU_PREVIEW.getValue()));
setItem(0, 48, ItemUtil.createItem(CompatibleMaterial.SUNFLOWER.getMaterial(), 1,
Message.EDITOR_ICON_MENU_PREVIEW.getValue()));
// Display Mode.
ItemStack displayItem = ItemUtil.createItem(
CompatibleMaterial.ROSE_RED.getMaterial(), 1, Message.EDITOR_ICON_MENU_SET_DISPLAY_MODE.getValue());
EditorLore.updateDisplayModeDescription(
displayItem,
targetHat.getIconData().getDisplayMode(),
ItemStack displayItem = ItemUtil.createItem(CompatibleMaterial.ROSE_RED.getMaterial(), 1,
Message.EDITOR_ICON_MENU_SET_DISPLAY_MODE.getValue());
EditorLore.updateDisplayModeDescription(displayItem, targetHat.getIconData().getDisplayMode(),
Message.EDITOR_ICON_MENU_DISPLAY_MODE_DESCRIPTION);
setButton(0, 50, displayItem, (event, slot) -> {
final int increment = event.isLeftClick() ? 1 : -1;
final int modeID =
MathUtil.wrap(targetHat.getDisplayMode().getID() + increment, IconDisplayMode.values().length, 0);
final int modeID = MathUtil.wrap(targetHat.getDisplayMode().getID() + increment,
IconDisplayMode.values().length, 0);
final IconDisplayMode mode = IconDisplayMode.fromId(modeID);
targetHat.setDisplayMode(mode);
EditorLore.updateDisplayModeDescription(
getItem(0, 50), mode, Message.EDITOR_ICON_MENU_DISPLAY_MODE_DESCRIPTION);
EditorLore.updateDisplayModeDescription(getItem(0, 50), mode,
Message.EDITOR_ICON_MENU_DISPLAY_MODE_DESCRIPTION);
return MenuClickResult.NEUTRAL;
});
// Update Frequency.
ItemStack frequencyItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_ICON_MENU_SET_UPDATE_FREQUENCY.getValue());
EditorLore.updateFrequencyDescription(
frequencyItem,
targetHat.getIconUpdateFrequency(),
ItemStack frequencyItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_ICON_MENU_SET_UPDATE_FREQUENCY.getValue());
EditorLore.updateFrequencyDescription(frequencyItem, targetHat.getIconUpdateFrequency(),
Message.EDITOR_ICON_MENU_UPDATE_FREQUENCY_DESCRIPTION);
setButton(0, 49, frequencyItem, (event, slot) -> {
final int increment = event.isLeftClick() ? 1 : -1;
final int frequency = (int) MathUtil.clamp(targetHat.getIconUpdateFrequency() + increment, 1, 63);
targetHat.setIconUpdateFrequency(frequency);
EditorLore.updateFrequencyDescription(
getItem(0, 49), frequency, Message.EDITOR_ICON_MENU_UPDATE_FREQUENCY_DESCRIPTION);
EditorLore.updateFrequencyDescription(getItem(0, 49), frequency,
Message.EDITOR_ICON_MENU_UPDATE_FREQUENCY_DESCRIPTION);
return MenuClickResult.NEUTRAL;
});
// Edit Action.
MenuAction editAction = (event, slot) -> {
editingIndex = getClampedIndex(slot, 10, 2);
if (event.isLeftClick()) {
EditorItemPromptMenu editorItemPromptMenu = new EditorItemPromptMenu(
core, editorManager, owner, iconTitle, iconName, iconDescription, (item) -> {
EditorItemPromptMenu editorItemPromptMenu = new EditorItemPromptMenu(core, editorManager, owner,
iconTitle, iconName, iconDescription, (item) ->
{
editorManager.closeCurrentMenu();
if (item == null) {
return;
}
ItemStack editingItem = ((ItemStack) item).clone();
@@ -193,6 +205,7 @@ public class EditorIconMenuOverview extends AbstractListMenu {
Damageable meta = (Damageable) editingItem.getItemMeta();
damage = meta.getDamage();
}
// Get the current item from the inventory slot.
@@ -208,6 +221,7 @@ public class EditorIconMenuOverview extends AbstractListMenu {
targetHat.getIconData().updateItem(editingIndex, currentItem);
isModified = true;
});
menuManager.addMenu(editorItemPromptMenu);
@@ -219,14 +233,17 @@ public class EditorIconMenuOverview extends AbstractListMenu {
deleteSlot(0, slot);
return MenuClickResult.NEGATIVE;
}
return MenuClickResult.NEUTRAL;
};
for (int i = 1; i < 28; i++) {
setAction(getNormalIndex(i, 10, 2), editAction);
}
// Current Items.
@@ -235,8 +252,7 @@ public class EditorIconMenuOverview extends AbstractListMenu {
ItemStackTemplate itemTemplate = items.get(i);
String displayName = Message.EDITOR_ICON_MENU_ITEM_PREFIX.getValue()
+ StringUtil.capitalizeFirstLetter(
itemTemplate.getMaterial().toString().toLowerCase());
+ StringUtil.capitalizeFirstLetter(itemTemplate.getMaterial().toString().toLowerCase());
ItemStack item = ItemUtil.createItem(itemTemplate.getMaterial(), 1, itemTemplate.getDurability());
int index = getNormalIndex(i, 10, 2);
@@ -244,24 +260,28 @@ public class EditorIconMenuOverview extends AbstractListMenu {
// Convert the display name to TextComponent using TrueOG Utils for color codes.
TextComponent nameComponent = Utils.legacySerializerAnyCase(displayName);
// Parse and process the description if it's a List<String>, converting it to List<TextComponent>.
List<TextComponent> descriptionComponent =
StringUtil.parseDescription(Message.EDITOR_ICON_MENU_ICON_DESCRIPTION.getValue()).stream()
.filter(component ->
component instanceof TextComponent) // Filter only TextComponent instances.
.map(component -> (TextComponent) component) // Cast Component to TextComponent.
.collect(Collectors.toList());
// Parse and process the description if it's a List<String>, converting it to
// List<TextComponent>.
List<TextComponent> descriptionComponent = StringUtil
.parseDescription(Message.EDITOR_ICON_MENU_ICON_DESCRIPTION.getValue()).stream()
.filter(component -> component instanceof TextComponent) // Filter only TextComponent instances.
.map(component -> (TextComponent) component) // Cast Component to TextComponent.
.collect(Collectors.toList());
// Safely convert List<TextComponent> to List<Component> without unchecked cast.
List<Component> description = descriptionComponent.stream()
.map(textComponent -> (Component) textComponent) // Cast TextComponent to Component.
List<Component> description = descriptionComponent.stream().map(textComponent -> (Component) textComponent) // Cast
// TextComponent
// to
// Component.
.collect(Collectors.toList());
// Call ItemUtil.setNameAndDescription with the correct types.
ItemUtil.setNameAndDescription(item, nameComponent, description);
setItem(0, index, item);
}
}
@Override
@@ -272,7 +292,9 @@ public class EditorIconMenuOverview extends AbstractListMenu {
core.getDatabase().saveMetaData(editorManager.getMenuName(), targetHat, DataType.ICON, 0);
isModified = false;
}
}
@Override
@@ -283,10 +305,12 @@ public class EditorIconMenuOverview extends AbstractListMenu {
if (iconData == null) {
return;
}
ItemStackTemplate itemTemplate = iconData.getNextItem(ticks);
ItemUtil.setItemType(getItem(0, 48), itemTemplate.getMaterial(), itemTemplate.getDurability());
}
@Override
@@ -298,5 +322,7 @@ public class EditorIconMenuOverview extends AbstractListMenu {
targetHat.getIconData().removeItem(getClampedIndex(slot, 10, 2));
isModified = true;
}
}
@@ -25,14 +25,9 @@ public class EditorItemPromptMenu extends AbstractStaticMenu {
private boolean isSearching = false;
public EditorItemPromptMenu(
CosmeticsOG core,
EditorMenuManager menuManager,
Player owner,
Message title,
Message itemName,
Message itemDescription,
MenuObjectCallback callback) {
public EditorItemPromptMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner, Message title,
Message itemName, Message itemDescription, MenuObjectCallback callback)
{
super(core, menuManager, owner);
@@ -43,6 +38,7 @@ public class EditorItemPromptMenu extends AbstractStaticMenu {
this.inventory = Bukkit.createInventory(null, 54, Utils.legacySerializerAnyCase(title.getValue()));
build();
}
@Override
@@ -52,6 +48,7 @@ public class EditorItemPromptMenu extends AbstractStaticMenu {
if (item == null) {
return MenuClickResult.NONE;
}
ItemStack i = new ItemStack(item.getType(), 1);
@@ -60,29 +57,32 @@ public class EditorItemPromptMenu extends AbstractStaticMenu {
callback.onSelect(i);
return MenuClickResult.NEUTRAL;
}
@Override
protected void build() {
ItemStack info = ItemUtil.createItem(
CompatibleMaterial.LIGHT_GRAY_STAINED_GLASS_PANE.getMaterial(), 1, itemName.getValue());
ItemStack info = ItemUtil.createItem(CompatibleMaterial.LIGHT_GRAY_STAINED_GLASS_PANE.getMaterial(), 1,
itemName.getValue());
ItemUtil.setItemDescription(info, StringUtil.parseDescription(itemDescription.getValue()));
for (int i = 0; i < inventory.getSize(); i++) {
setItem(i, info);
}
// Back Button.
setButton(10, backButtonItem, backButtonAction);
// Search Button.
setButton(
37,
setButton(37,
ItemUtil.createItem(CompatibleMaterial.SIGN.getMaterial(), 1, Message.EDITOR_MISC_SEARCH.getValue()),
(event, slot) -> {
(event, slot) ->
{
isSearching = true;
core.getPlayerState(owner).setMetaState(MetaState.BLOCK_SEARCH);
@@ -91,14 +91,17 @@ public class EditorItemPromptMenu extends AbstractStaticMenu {
menuManager.closeInventory();
return MenuClickResult.NEUTRAL;
});
// Recents.
MenuAction selectRecentAction = (event, slot) -> {
ItemStack item = event.getEvent().getCurrentItem();
if (item == null) {
return MenuClickResult.NONE;
}
ItemStack i = new ItemStack(item.getType(), 1);
@@ -107,17 +110,19 @@ public class EditorItemPromptMenu extends AbstractStaticMenu {
callback.onSelect(i);
return MenuClickResult.NEUTRAL;
};
List<ItemStack> recentItems = editorManager.getOwnerState().getRecentItems();
List<Component> description =
StringUtil.parseDescription(Message.EDITOR_ICON_MENU_RECENTS_DESCRIPTION.getValue());
List<Component> description = StringUtil
.parseDescription(Message.EDITOR_ICON_MENU_RECENTS_DESCRIPTION.getValue());
int index = 0;
for (ItemStack item : recentItems) {
if (index >= 20) {
return;
}
ItemStack i = item.clone();
@@ -125,7 +130,9 @@ public class EditorItemPromptMenu extends AbstractStaticMenu {
ItemUtil.setItemDescription(i, description);
setButton(getNormalIndex(index++, 12, 4), i, selectRecentAction);
}
}
@Override
@@ -142,29 +149,41 @@ public class EditorItemPromptMenu extends AbstractStaticMenu {
editorManager.resetMetaArgument();
EditorSearchMenu editorSearchMenu =
new EditorSearchMenu(core, menuManager, owner, searchQuery, (item) -> {
EditorSearchMenu editorSearchMenu = new EditorSearchMenu(core, menuManager, owner, searchQuery,
(item) ->
{
ItemStack i = (ItemStack) item;
if (i == null) {
return;
}
menuManager.closeCurrentMenu();
editorManager.getOwnerState().addRecentItem(i);
callback.onSelect(i);
});
menuManager.addMenu(editorSearchMenu);
editorSearchMenu.open();
}
}
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -25,8 +25,8 @@ public class EditorItemStackMenu extends AbstractListMenu {
private final Message iconName = Message.EDITOR_ICON_MENU_ITEM_INFO;
private final Message iconDescription = Message.EDITOR_ICON_MENU_ITEM_DESCRIPTION;
private final ItemStack emptyItem =
ItemUtil.createItem(CompatibleMaterial.BARRIER.getMaterial(), 1, Message.EDITOR_MISC_EMPTY_MENU.getValue());
private final ItemStack emptyItem = ItemUtil.createItem(CompatibleMaterial.BARRIER.getMaterial(), 1,
Message.EDITOR_MISC_EMPTY_MENU.getValue());
private final EditorMenuManager editorManager;
private final MenuCallback callback;
@@ -37,8 +37,9 @@ public class EditorItemStackMenu extends AbstractListMenu {
private boolean dataModified = false;
private boolean itemModified = false;
public EditorItemStackMenu(
CosmeticsOG core, EditorMenuManager menuManager, Player owner, int particleIndex, MenuCallback callback) {
public EditorItemStackMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner, int particleIndex,
MenuCallback callback)
{
super(core, menuManager, owner, true);
@@ -48,15 +49,19 @@ public class EditorItemStackMenu extends AbstractListMenu {
this.targetHat = menuManager.getTargetHat();
this.totalPages = 1;
this.itemAction = (event, slot) -> {
if (event.isLeftClick()) {
EditorItemPromptMenu editorItemMenu = new EditorItemPromptMenu(
core, editorManager, owner, iconTitle, iconName, iconDescription, (item) -> {
EditorItemPromptMenu editorItemMenu = new EditorItemPromptMenu(core, editorManager, owner, iconTitle,
iconName, iconDescription, (item) ->
{
menuManager.closeCurrentMenu();
if (item == null) {
return;
}
ItemStack i = (ItemStack) item;
@@ -72,6 +77,7 @@ public class EditorItemStackMenu extends AbstractListMenu {
Damageable meta = (Damageable) i.getItemMeta();
damage = meta.getDamage();
}
// Set the material and durability for the current item.
@@ -83,10 +89,10 @@ public class EditorItemStackMenu extends AbstractListMenu {
ItemUtil.setItemName(currentItem, displayName);
// Update the item in the target's item data.
ItemStackData itemStackData =
targetHat.getParticleData(particleIndex).getItemStackData();
ItemStackData itemStackData = targetHat.getParticleData(particleIndex).getItemStackData();
itemStackData.updateItem(getClampedIndex(slot, 10, 2), i);
itemModified = true;
});
menuManager.addMenu(editorItemMenu);
@@ -98,29 +104,32 @@ public class EditorItemStackMenu extends AbstractListMenu {
deleteSlot(0, slot);
return MenuClickResult.NEGATIVE;
}
return MenuClickResult.NEUTRAL;
};
setMenu(
0,
Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_ITEMSTACK_MENU_TITLE.getValue())));
setMenu(0, Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_ITEMSTACK_MENU_TITLE.getValue())));
build();
}
@Override
public void insertEmptyItem() {
setButton(0, 22, emptyItem, emptyAction);
}
@Override
public void removeEmptyItem() {
setButton(0, 22, null, itemAction);
}
@Override
@@ -130,16 +139,20 @@ public class EditorItemStackMenu extends AbstractListMenu {
setButton(0, 46, backButtonItem, backButtonAction);
ItemStack velocityItem =
ItemUtil.createItem(Material.ARROW, 1, Message.EDITOR_ITEMSTACK_MENU_SET_VELOCITY.getValue());
EditorLore.updateVectorDescription(
velocityItem, itemStackData.getVelocity(), Message.EDITOR_ITEMSTACK_MENU_VELOCITY_DESCRIPTION);
ItemStack velocityItem = ItemUtil.createItem(Material.ARROW, 1,
Message.EDITOR_ITEMSTACK_MENU_SET_VELOCITY.getValue());
EditorLore.updateVectorDescription(velocityItem, itemStackData.getVelocity(),
Message.EDITOR_ITEMSTACK_MENU_VELOCITY_DESCRIPTION);
setButton(0, 48, velocityItem, (event, slot) -> {
if (event.isLeftClick()) {
EditorVelocityMenu editorVelocityMenu =
new EditorVelocityMenu(core, editorManager, owner, particleIndex, () -> {
EditorVelocityMenu editorVelocityMenu = new EditorVelocityMenu(core, editorManager, owner,
particleIndex, () ->
{
onVelocityChange();
});
menuManager.addMenu(editorVelocityMenu);
@@ -152,33 +165,36 @@ public class EditorItemStackMenu extends AbstractListMenu {
data.setVelocity(0, 0, 0);
onVelocityChange();
}
return MenuClickResult.NEUTRAL;
});
ItemStack gravityItem =
ItemUtil.createItem(Material.LEATHER_BOOTS, 1, Message.EDITOR_ITEMSTACK_MENU_TOGGLE_GRAVITY.getValue());
EditorLore.updateBooleanDescription(
gravityItem, itemStackData.hasGravity(), Message.EDITOR_ITEMSTACK_MENU_GRAVITY_DESCRIPTION);
ItemStack gravityItem = ItemUtil.createItem(Material.LEATHER_BOOTS, 1,
Message.EDITOR_ITEMSTACK_MENU_TOGGLE_GRAVITY.getValue());
EditorLore.updateBooleanDescription(gravityItem, itemStackData.hasGravity(),
Message.EDITOR_ITEMSTACK_MENU_GRAVITY_DESCRIPTION);
setButton(0, 49, gravityItem, (event, slot) -> {
ItemStackData data = targetHat.getParticleData(particleIndex).getItemStackData();
data.setGravity(!data.hasGravity());
dataModified = true;
EditorLore.updateBooleanDescription(
getItem(0, 49), data.hasGravity(), Message.EDITOR_ITEMSTACK_MENU_GRAVITY_DESCRIPTION);
EditorLore.updateBooleanDescription(getItem(0, 49), data.hasGravity(),
Message.EDITOR_ITEMSTACK_MENU_GRAVITY_DESCRIPTION);
return MenuClickResult.NEUTRAL;
});
ItemStack durationItem = ItemUtil.createItem(
CompatibleMaterial.FIREWORK_STAR.getMaterial(),
1,
ItemStack durationItem = ItemUtil.createItem(CompatibleMaterial.FIREWORK_STAR.getMaterial(), 1,
Message.EDITOR_ITEMSTACK_MENU_SET_DURATION.getValue());
EditorLore.updateDurationDescription(
durationItem, itemStackData.getDuration(), Message.EDITOR_ITEMSTACK_MENU_DURATION_DESCRIPTION);
EditorLore.updateDurationDescription(durationItem, itemStackData.getDuration(),
Message.EDITOR_ITEMSTACK_MENU_DURATION_DESCRIPTION);
setButton(0, 50, durationItem, (event, slot) -> {
int normalClick = event.isLeftClick() ? 20 : -20;
int shiftClick = event.isShiftClick() ? 30 : 1;
int modifier = normalClick * shiftClick;
@@ -188,37 +204,45 @@ public class EditorItemStackMenu extends AbstractListMenu {
data.setDuration(duration);
dataModified = true;
EditorLore.updateDurationDescription(
getItem(0, 50), data.getDuration(), Message.EDITOR_ITEMSTACK_MENU_DURATION_DESCRIPTION);
EditorLore.updateDurationDescription(getItem(0, 50), data.getDuration(),
Message.EDITOR_ITEMSTACK_MENU_DURATION_DESCRIPTION);
return MenuClickResult.NEUTRAL;
});
ItemStack addItem = ItemUtil.createItem(
CompatibleMaterial.TURTLE_HELMET.getMaterial(), 1, Message.EDITOR_ITEMSTACK_MENU_ADD_ITEM.getValue());
ItemStack addItem = ItemUtil.createItem(CompatibleMaterial.TURTLE_HELMET.getMaterial(), 1,
Message.EDITOR_ITEMSTACK_MENU_ADD_ITEM.getValue());
setButton(0, 52, addItem, (event, slot) -> {
EditorItemPromptMenu editorItemMenu = new EditorItemPromptMenu(
core, editorManager, owner, iconTitle, iconName, iconDescription, (item) -> {
EditorItemPromptMenu editorItemMenu = new EditorItemPromptMenu(core, editorManager, owner, iconTitle,
iconName, iconDescription, (item) ->
{
menuManager.closeCurrentMenu();
if (item == null) {
return;
}
ItemStack i = (ItemStack) item;
addItem(slot, i);
});
menuManager.addMenu(editorItemMenu);
editorItemMenu.open();
return MenuClickResult.NEUTRAL;
});
for (int i = 0; i < 28; i++) {
setAction(getClampedIndex(i, 10, 2), itemAction);
}
List<ItemStack> items = itemStackData.getItems();
@@ -227,21 +251,22 @@ public class EditorItemStackMenu extends AbstractListMenu {
setEmpty(true);
return;
}
for (int i = 0; i < items.size(); i++) {
ItemStack item = items.get(i);
String displayName =
Message.EDITOR_ICON_MENU_ITEM_PREFIX.getValue() + StringUtil.getMaterialName(item.getType());
String displayName = Message.EDITOR_ICON_MENU_ITEM_PREFIX.getValue()
+ StringUtil.getMaterialName(item.getType());
ItemUtil.setNameAndDescription(
item,
Utils.legacySerializerAnyCase(displayName),
ItemUtil.setNameAndDescription(item, Utils.legacySerializerAnyCase(displayName),
StringUtil.parseDescription(Message.EDITOR_ICON_MENU_ICON_DESCRIPTION.getValue()));
setItem(0, getNormalIndex(i, 10, 2), item);
}
}
@Override
@@ -252,17 +277,22 @@ public class EditorItemStackMenu extends AbstractListMenu {
if (dataModified) {
core.getDatabase().saveParticleData(name, targetHat, particleIndex);
}
if (itemModified) {
core.getDatabase().saveMetaData(name, targetHat, DataType.ITEMSTACK, particleIndex);
callback.onCallback();
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
private void addItem(int slot, ItemStack item) {
@@ -274,17 +304,18 @@ public class EditorItemStackMenu extends AbstractListMenu {
if (size > 27) {
return;
}
Material material = item.getType();
ItemStack i = ItemUtil.createItem(
material,
ItemStack i = ItemUtil.createItem(material,
Message.EDITOR_ICON_MENU_ITEM_PREFIX.getValue() + StringUtil.getMaterialName(material),
StringUtil.parseDescription(Message.EDITOR_ICON_MENU_ICON_DESCRIPTION.getValue()));
itemStackData.addItem(item);
setItem(0, getNormalIndex(size, 10, 2), i);
itemModified = true;
}
@Override
@@ -299,7 +330,9 @@ public class EditorItemStackMenu extends AbstractListMenu {
if (itemStackData.getItems().isEmpty()) {
setEmpty(true);
}
}
private void onVelocityChange() {
@@ -307,7 +340,9 @@ public class EditorItemStackMenu extends AbstractListMenu {
dataModified = true;
ItemStackData itemStackData = targetHat.getParticleData(particleIndex).getItemStackData();
EditorLore.updateVectorDescription(
getItem(0, 48), itemStackData.getVelocity(), Message.EDITOR_ITEMSTACK_MENU_VELOCITY_DESCRIPTION);
EditorLore.updateVectorDescription(getItem(0, 48), itemStackData.getVelocity(),
Message.EDITOR_ITEMSTACK_MENU_VELOCITY_DESCRIPTION);
}
}
@@ -42,14 +42,13 @@ public class EditorMainMenu extends AbstractStaticMenu {
protected final Hat targetHat;
protected final PlayerState ownerState;
protected final ItemStack noParticleItem = ItemUtil.createItem(
CompatibleMaterial.BARRIER.getMaterial(),
protected final ItemStack noParticleItem = ItemUtil.createItem(CompatibleMaterial.BARRIER.getMaterial(),
Message.EDITOR_MAIN_MENU_NO_PARTICLES.getValue(),
StringUtil.parseDescription(Message.EDITOR_MAIN_MENU_NO_PARTICLES_DESCRIPTION.getValue()));
protected final ItemStack singleParticleItem =
ItemUtil.createItem(Material.REDSTONE, 1, Message.EDITOR_MAIN_MENU_SET_PARTICLE.getValue());
protected final ItemStack multipleParticlesItem =
ItemUtil.createItem(Material.BUCKET, 1, Message.EDITOR_MAIN_MENU_EDIT_PARTICLES.getValue());
protected final ItemStack singleParticleItem = ItemUtil.createItem(Material.REDSTONE, 1,
Message.EDITOR_MAIN_MENU_SET_PARTICLE.getValue());
protected final ItemStack multipleParticlesItem = ItemUtil.createItem(Material.BUCKET, 1,
Message.EDITOR_MAIN_MENU_EDIT_PARTICLES.getValue());
protected final MenuAction setParticleAction;
protected final MenuAction editParticleAction;
@@ -63,18 +62,22 @@ public class EditorMainMenu extends AbstractStaticMenu {
this.editorBaseMenu = menuManager.getEditingMenu();
this.targetHat = editorManager.getTargetHat();
this.ownerState = core.getPlayerState(owner);
this.inventory = Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_MAIN_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_MAIN_MENU_TITLE.getValue()));
setParticleAction = (event, slot) -> {
if (event.isLeftClick()) {
EditorParticleSelectionMenu editorParticleMenu =
new EditorParticleSelectionMenu(core, menuManager, owner, 0, (particle) -> {
EditorParticleSelectionMenu editorParticleMenu = new EditorParticleSelectionMenu(core, menuManager,
owner, 0, (particle) ->
{
ParticleEffect pe = (ParticleEffect) particle;
if (pe == null) {
return;
}
targetHat.setParticle(0, pe);
@@ -85,9 +88,11 @@ public class EditorMainMenu extends AbstractStaticMenu {
if (targetHat.getEffect().getParticlesSupported() == 1) {
EditorLore.updateParticleDescription(getItem(particleButtonSlot), targetHat, 0);
}
menuManager.closeCurrentMenu();
});
menuManager.addMenu(editorParticleMenu);
@@ -97,28 +102,35 @@ public class EditorMainMenu extends AbstractStaticMenu {
} else if (event.isRightClick()) {
onParticleEdit(getItem(particleButtonSlot), 0);
}
return MenuClickResult.NEUTRAL;
};
editParticleAction = (event, slot) -> {
EditorParticleMenuOverview editorParticleMenuOverview =
new EditorParticleMenuOverview(core, editorManager, owner, this);
EditorParticleMenuOverview editorParticleMenuOverview = new EditorParticleMenuOverview(core, editorManager,
owner, this);
menuManager.addMenu(editorParticleMenuOverview);
editorParticleMenuOverview.open();
return MenuClickResult.NEUTRAL;
};
noParticle4U = (event, slot) -> {
CompatibleSound.ENTITY_VILLAGER_NO.play(owner, 1.0f, 1.0f);
return MenuClickResult.NONE;
};
build();
}
@Override
@@ -130,10 +142,11 @@ public class EditorMainMenu extends AbstractStaticMenu {
setButton(46, mainMenuButtonItem, backButtonAction);
// Item Meta.
ItemStack metaItem = ItemUtil.createItem(
CompatibleMaterial.SIGN.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_META.getValue());
ItemStack metaItem = ItemUtil.createItem(CompatibleMaterial.SIGN.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_META.getValue());
EditorLore.updateGenericDescription(metaItem, Message.EDITOR_MAIN_MENU_META_DESCRIPTION);
setButton(13, metaItem, (event, slot) -> {
if (event.isLeftClick()) {
EditorMetaMenu editorMetaMenu = new EditorMetaMenu(core, editorManager, owner);
@@ -143,50 +156,58 @@ public class EditorMainMenu extends AbstractStaticMenu {
} else if (event.isRightClick()) {
EditorDescriptionMenu editorDescriptionMenu =
new EditorDescriptionMenu(core, editorManager, owner, true);
EditorDescriptionMenu editorDescriptionMenu = new EditorDescriptionMenu(core, editorManager, owner,
true);
menuManager.addMenu(editorDescriptionMenu);
editorDescriptionMenu.open();
}
return MenuClickResult.NEUTRAL;
});
// Price.
ItemStack priceItem =
ItemUtil.createItem(Material.GOLD_NUGGET, 1, Message.EDITOR_MAIN_MENU_SET_PRICE.getValue());
ItemStack priceItem = ItemUtil.createItem(Material.GOLD_NUGGET, 1,
Message.EDITOR_MAIN_MENU_SET_PRICE.getValue());
EditorLore.updatePriceDescription(priceItem, targetHat.getPrice(), Message.EDITOR_MAIN_MENU_PRICE_DESCRIPTION);
setButton(15, priceItem, (event, slot) -> {
final int increment = (event.isLeftClick() ? 1 : -1) * (event.isShiftClick() ? 10 : 1);
final int price = targetHat.getPrice() + increment;
targetHat.setPrice(price);
EditorLore.updatePriceDescription(
getItem(15), targetHat.getPrice(), Message.EDITOR_MAIN_MENU_PRICE_DESCRIPTION);
EditorLore.updatePriceDescription(getItem(15), targetHat.getPrice(),
Message.EDITOR_MAIN_MENU_PRICE_DESCRIPTION);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
// Sound.
ItemStack soundItem = ItemUtil.createItem(
CompatibleMaterial.MUSIC_DISC_STRAD.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_SOUND.getValue());
ItemStack soundItem = ItemUtil.createItem(CompatibleMaterial.MUSIC_DISC_STRAD.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_SOUND.getValue());
EditorLore.updateSoundItemDescription(soundItem, targetHat);
setButton(28, soundItem, (event, slot) -> {
if (event.isLeftClick()) {
EditorSoundMenu editorSoundMenu = new EditorSoundMenu(core, editorManager, owner, (sound) -> {
menuManager.closeCurrentMenu();
if (sound == null) {
return;
}
Sound s = (Sound) sound;
targetHat.setSound(s);
EditorLore.updateSoundItemDescription(getItem(28), targetHat);
});
menuManager.addMenu(editorSoundMenu);
@@ -197,17 +218,19 @@ public class EditorMainMenu extends AbstractStaticMenu {
targetHat.removeSound();
EditorLore.updateSoundItemDescription(getItem(28), targetHat);
}
return MenuClickResult.NEUTRAL;
});
// Clone.
ItemStack cloneItem = ItemUtil.createItem(
CompatibleMaterial.PRISMARINE_SHARD.getMaterial(),
ItemStack cloneItem = ItemUtil.createItem(CompatibleMaterial.PRISMARINE_SHARD.getMaterial(),
Message.EDITOR_MAIN_MENU_CLONE.getValue(),
StringUtil.parseDescription(Message.EDITOR_MAIN_MENU_CLONE_DESCRIPTION.getValue()));
setButton(30, cloneItem, (event, slot) -> {
if (targetHat.isModified()) {
int targetSlot = editorManager.getTargetSlot();
@@ -215,6 +238,7 @@ public class EditorMainMenu extends AbstractStaticMenu {
core.getDatabase().saveHat(editorBaseMenu.getMenuInventory().getName(), targetSlot, targetHat);
targetHat.clearPropertyChanges();
}
EditorSlotMenu editorSlotMenu = new EditorSlotMenu(core, editorManager, owner, editorBaseMenu, true);
@@ -223,28 +247,33 @@ public class EditorMainMenu extends AbstractStaticMenu {
editorSlotMenu.open();
return MenuClickResult.NEUTRAL;
});
// Move.
ItemStack moveItem = ItemUtil.createItem(
CompatibleMaterial.MAP.getMaterial(),
ItemStack moveItem = ItemUtil.createItem(CompatibleMaterial.MAP.getMaterial(),
Message.EDITOR_MAIN_MENU_MOVE.getValue(),
StringUtil.parseDescription(Message.EDITOR_MAIN_MENU_MOVE_DESCRIPTION.getValue()));
setButton(32, moveItem, (event, slot) -> {
EditorMenuSelectionMenu editorMenuSelectionMenu =
new EditorMenuSelectionMenu(core, editorManager, owner, false, (menuName) -> {
EditorMenuSelectionMenu editorMenuSelectionMenu = new EditorMenuSelectionMenu(core, editorManager, owner,
false, (menuName) ->
{
if (menuName == null) {
return;
}
String name = (String) menuName;
EditorTransferMenu editorTransferMenu =
new EditorTransferMenu(core, editorManager, owner, name);
EditorTransferMenu editorTransferMenu = new EditorTransferMenu(core, editorManager, owner,
name);
menuManager.addMenu(editorTransferMenu);
editorTransferMenu.open();
});
menuManager.addMenu(editorMenuSelectionMenu);
@@ -252,46 +281,51 @@ public class EditorMainMenu extends AbstractStaticMenu {
editorMenuSelectionMenu.open();
return MenuClickResult.NEUTRAL;
});
// Node.
ItemStack nodeItem = ItemUtil.createItem(
Material.ANVIL,
Message.EDITOR_MAIN_MENU_EDIT_NODES.getValue(),
ItemStack nodeItem = ItemUtil.createItem(Material.ANVIL, Message.EDITOR_MAIN_MENU_EDIT_NODES.getValue(),
StringUtil.parseDescription(Message.EDITOR_MAIN_MENU_NODE_DESCRIPTION.getValue()));
setButton(34, nodeItem, (event, slot) -> {
EditorNodeMenuOverview editorNodeMenuOverview = new EditorNodeMenuOverview(core, editorManager, owner);
menuManager.addMenu(editorNodeMenuOverview);
editorNodeMenuOverview.open();
return MenuClickResult.NEUTRAL;
});
// Slot.
ItemStack slotItem = ItemUtil.createItem(
Material.ITEM_FRAME,
Message.EDITOR_MAIN_MENU_SET_SLOT.getValue(),
ItemStack slotItem = ItemUtil.createItem(Material.ITEM_FRAME, Message.EDITOR_MAIN_MENU_SET_SLOT.getValue(),
StringUtil.parseDescription(Message.EDITOR_MAIN_MENU_SLOT_DESCRIPTION.getValue()));
setButton(38, slotItem, (event, slot) -> {
EditorSlotMenu editorSlotMenu = new EditorSlotMenu(core, editorManager, owner, editorBaseMenu, false);
menuManager.addMenu(editorSlotMenu);
editorSlotMenu.open();
return MenuClickResult.NEUTRAL;
});
// Icon.
ItemStack iconItem = targetHat.getItem();
ItemUtil.setNameAndDescription(
iconItem, Message.EDITOR_MAIN_MENU_SET_ICON, Message.EDITOR_MAIN_MENU_ICON_DESCRIPTION);
ItemUtil.setNameAndDescription(iconItem, Message.EDITOR_MAIN_MENU_SET_ICON,
Message.EDITOR_MAIN_MENU_ICON_DESCRIPTION);
setButton(41, iconItem, (event, slot) -> {
EditorIconMenuOverview editorIconMenuOverview =
new EditorIconMenuOverview(core, editorManager, owner, (mainItem) -> {
EditorIconMenuOverview editorIconMenuOverview = new EditorIconMenuOverview(core, editorManager, owner,
(mainItem) ->
{
if (mainItem == null) {
return;
}
ItemStack item = (ItemStack) mainItem;
@@ -300,6 +334,7 @@ public class EditorMainMenu extends AbstractStaticMenu {
int damage = 0;
ItemUtil.setItemType(getItem(41), material, damage);
});
menuManager.addMenu(editorIconMenuOverview);
@@ -307,16 +342,20 @@ public class EditorMainMenu extends AbstractStaticMenu {
editorIconMenuOverview.open();
return MenuClickResult.NEUTRAL;
});
// Potion.
ItemStack potionItem = ItemUtil.createItem(Material.POTION, 1, Message.EDITOR_MAIN_MENU_SET_POTION.getValue());
EditorLore.updatePotionDescription(potionItem, targetHat.getPotion());
setButton(42, potionItem, (event, slot) -> {
if (event.isLeftClick()) {
EditorPotionMenu editorPotionMenu = new EditorPotionMenu(core, editorManager, owner, () -> {
EditorLore.updatePotionDescription(getItem(42), targetHat.getPotion());
});
menuManager.addMenu(editorPotionMenu);
@@ -327,28 +366,30 @@ public class EditorMainMenu extends AbstractStaticMenu {
targetHat.removePotion();
EditorLore.updatePotionDescription(getItem(42), targetHat.getPotion());
}
return MenuClickResult.NEUTRAL;
});
}
protected void buildSection() {
// Equip.
ItemStack equipItem = ItemUtil.createItem(
Material.DIAMOND_HELMET,
Message.EDITOR_MISC_EQUIP.getValue(),
ItemStack equipItem = ItemUtil.createItem(Material.DIAMOND_HELMET, Message.EDITOR_MISC_EQUIP.getValue(),
StringUtil.parseDescription(Message.EDITOR_MAIN_MENU_EQUIP_DESCRIPTION.getValue()));
setButton(equipButtonSlot, equipItem, (event, slot) -> {
// Stop if the player has more than the maximum allowed hats.
if (!ownerState.canEquip()) {
owner.sendMessage(Message.HAT_EQUIPPED_OVERFLOW.replace(
"{1}", Integer.toString(SettingsManager.MAXIMUM_HAT_LIMIT.getInt())));
owner.sendMessage(Message.HAT_EQUIPPED_OVERFLOW.replace("{1}",
Integer.toString(SettingsManager.MAXIMUM_HAT_LIMIT.getInt())));
return MenuClickResult.NEGATIVE;
}
Hat clone;
@@ -360,6 +401,7 @@ public class EditorMainMenu extends AbstractStaticMenu {
} else {
clone = editorManager.getBaseHat().equippableClone();
}
clone.setCanBeSaved(false);
@@ -372,22 +414,26 @@ public class EditorMainMenu extends AbstractStaticMenu {
menuManager.closeInventory();
return MenuClickResult.NEUTRAL;
});
// Type.
ItemStack typeItem = ItemUtil.createItem(
CompatibleMaterial.CYAN_DYE.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_TYPE.getValue());
ItemStack typeItem = ItemUtil.createItem(CompatibleMaterial.CYAN_DYE.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_TYPE.getValue());
EditorLore.updateTypeDescription(typeItem, targetHat);
setButton(10, typeItem, (event, slot) -> {
if (!event.isShiftClick()) {
EditorTypeMenu editorTypeMenu = new EditorTypeMenu(core, editorManager, owner, (obj) -> {
ParticleType type = targetHat.getType();
// Reset animation if new type doesn't support it.
if (!type.supportsAnimation() && targetHat.getAnimation() == ParticleAnimation.ANIMATED) {
targetHat.setAnimation(ParticleAnimation.STATIC);
}
EditorLore.updateTrackingDescription(getItem(trackingButtonSlot), targetHat);
@@ -403,11 +449,13 @@ public class EditorMainMenu extends AbstractStaticMenu {
if (targetHat.getParticleData(0).hasPropertyChanges()) {
core.getDatabase()
.saveParticleData(
editorBaseMenu.getMenuInventory().getName(), targetHat, 0);
core.getDatabase().saveParticleData(editorBaseMenu.getMenuInventory().getName(), targetHat,
0);
}
}
});
menuManager.addMenu(editorTypeMenu);
@@ -417,26 +465,29 @@ public class EditorMainMenu extends AbstractStaticMenu {
} else {
int id = targetHat.getAnimation().getID();
ParticleAnimation animation =
ParticleAnimation.fromID(MathUtil.wrap(id + 1, ParticleAnimation.values().length, 0));
ParticleAnimation animation = ParticleAnimation
.fromID(MathUtil.wrap(id + 1, ParticleAnimation.values().length, 0));
targetHat.setAnimation(animation);
EditorLore.updateTypeDescription(getItem(10), targetHat);
}
return MenuClickResult.NEUTRAL;
});
// Location.
ItemStack locationItem =
ItemUtil.createItem(Material.CLAY_BALL, 1, Message.EDITOR_MAIN_MENU_SET_LOCATION.getValue());
EditorLore.updateLocationDescription(
locationItem, targetHat.getLocation(), Message.EDITOR_MAIN_MENU_LOCATION_DESCRIPTION);
ItemStack locationItem = ItemUtil.createItem(Material.CLAY_BALL, 1,
Message.EDITOR_MAIN_MENU_SET_LOCATION.getValue());
EditorLore.updateLocationDescription(locationItem, targetHat.getLocation(),
Message.EDITOR_MAIN_MENU_LOCATION_DESCRIPTION);
setButton(11, locationItem, (event, slot) -> {
final int increment = event.isLeftClick() ? 1 : -1;
final int locationID =
MathUtil.wrap(targetHat.getLocation().getID() + increment, ParticleLocation.values().length, 0);
final int locationID = MathUtil.wrap(targetHat.getLocation().getID() + increment,
ParticleLocation.values().length, 0);
final ParticleLocation location = ParticleLocation.fromId(locationID);
targetHat.setLocation(location);
@@ -444,6 +495,7 @@ public class EditorMainMenu extends AbstractStaticMenu {
EditorLore.updateLocationDescription(getItem(11), location, Message.EDITOR_MAIN_MENU_LOCATION_DESCRIPTION);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
// Speed.
@@ -452,9 +504,10 @@ public class EditorMainMenu extends AbstractStaticMenu {
// Temporary tweak until 5.0.
if (core.getDatabaseType() == DatabaseType.YAML) {
EditorLore.updateDoubleDescription(
speedItem, targetHat.getSpeed(), Message.EDITOR_MAIN_MENU_SPEED_DESCRIPTION);
EditorLore.updateDoubleDescription(speedItem, targetHat.getSpeed(),
Message.EDITOR_MAIN_MENU_SPEED_DESCRIPTION);
setButton(16, speedItem, (event, slot) -> {
final double normalClick = event.isLeftClick() ? 0.1D : -0.1D;
final double shiftClick = event.isShiftClick() ? 10D : 1D;
final double modifier = normalClick * shiftClick;
@@ -462,10 +515,11 @@ public class EditorMainMenu extends AbstractStaticMenu {
targetHat.setSpeed(speed);
EditorLore.updateDoubleDescription(
getItem(16), targetHat.getSpeed(), Message.EDITOR_MAIN_MENU_SPEED_DESCRIPTION);
EditorLore.updateDoubleDescription(getItem(16), targetHat.getSpeed(),
Message.EDITOR_MAIN_MENU_SPEED_DESCRIPTION);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
}
@@ -473,29 +527,36 @@ public class EditorMainMenu extends AbstractStaticMenu {
// MariaDB.
else {
EditorLore.updateIntegerDescription(
speedItem, (int) targetHat.getSpeed(), Message.EDITOR_MAIN_MENU_SPEED_DESCRIPTION);
EditorLore.updateIntegerDescription(speedItem, (int) targetHat.getSpeed(),
Message.EDITOR_MAIN_MENU_SPEED_DESCRIPTION);
setButton(16, speedItem, (event, slot) -> {
final int increment = event.isLeftClick() ? 1 : -1;
final int speed = (int) targetHat.getSpeed() + increment;
targetHat.setSpeed(speed);
EditorLore.updateIntegerDescription(
getItem(16), (int) targetHat.getSpeed(), Message.EDITOR_MAIN_MENU_SPEED_DESCRIPTION);
EditorLore.updateIntegerDescription(getItem(16), (int) targetHat.getSpeed(),
Message.EDITOR_MAIN_MENU_SPEED_DESCRIPTION);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
}
// Action.
ItemStack actionItem = ItemUtil.createItem(
CompatibleMaterial.GUNPOWDER.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_ACTION.getValue());
ItemStack actionItem = ItemUtil.createItem(CompatibleMaterial.GUNPOWDER.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_ACTION.getValue());
EditorLore.updateGenericActionDescription(actionItem, targetHat);
setButton(19, actionItem, (event, slot) -> {
EditorActionMenuOverview editorActionMenuOverview =
new EditorActionMenuOverview(core, editorManager, owner, () -> {
EditorActionMenuOverview editorActionMenuOverview = new EditorActionMenuOverview(core, editorManager, owner,
() ->
{
EditorLore.updateGenericActionDescription(getItem(19), editorManager.getBaseHat());
});
menuManager.addMenu(editorActionMenuOverview);
@@ -503,13 +564,15 @@ public class EditorMainMenu extends AbstractStaticMenu {
editorActionMenuOverview.open();
return MenuClickResult.NEUTRAL;
});
// Mode.
ItemStack modeItem = ItemUtil.createItem(
CompatibleMaterial.ROSE_RED.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_MODE.getValue());
ItemStack modeItem = ItemUtil.createItem(CompatibleMaterial.ROSE_RED.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_MODE.getValue());
EditorLore.updateModeDescription(modeItem, targetHat.getMode(), Message.EDITOR_MAIN_MENU_MODE_DESCRIPTION);
setButton(20, modeItem, (event, slot) -> {
List<ParticleMode> modes = ParticleMode.getSupportedModes();
final int increment = event.isLeftClick() ? 1 : -1;
@@ -522,44 +585,47 @@ public class EditorMainMenu extends AbstractStaticMenu {
EditorLore.updateModeDescription(getItem(20), mode, Message.EDITOR_MAIN_MENU_MODE_DESCRIPTION);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
// Frequency.
ItemStack frequencyItem = ItemUtil.createItem(
CompatibleMaterial.COMPARATOR.getMaterial(),
1,
ItemStack frequencyItem = ItemUtil.createItem(CompatibleMaterial.COMPARATOR.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_UPDATE_FREQUENCY.getValue());
EditorLore.updateFrequencyDescription(
frequencyItem, targetHat.getUpdateFrequency(), Message.EDITOR_MAIN_MENU_UPDATE_FREQUENCY_DESCRIPTION);
EditorLore.updateFrequencyDescription(frequencyItem, targetHat.getUpdateFrequency(),
Message.EDITOR_MAIN_MENU_UPDATE_FREQUENCY_DESCRIPTION);
setButton(22, frequencyItem, (event, slot) -> {
final int increment = event.isLeftClick() ? 1 : -1;
int frequency = targetHat.getUpdateFrequency() + increment;
if (event.isMiddleClick()) {
frequency = 2;
}
targetHat.setUpdateFrequency(frequency);
EditorLore.updateFrequencyDescription(
getItem(22), targetHat.getUpdateFrequency(), Message.EDITOR_MAIN_MENU_UPDATE_FREQUENCY_DESCRIPTION);
EditorLore.updateFrequencyDescription(getItem(22), targetHat.getUpdateFrequency(),
Message.EDITOR_MAIN_MENU_UPDATE_FREQUENCY_DESCRIPTION);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
// Angle.
ItemStack angleItem =
ItemUtil.createItem(Material.SLIME_BALL, 1, Message.EDITOR_MAIN_MENU_SET_ANGLE.getValue());
EditorLore.updateVectorDescription(
angleItem, targetHat.getAngle(), Message.EDITOR_MAIN_MENU_VECTOR_DESCRIPTION);
ItemStack angleItem = ItemUtil.createItem(Material.SLIME_BALL, 1,
Message.EDITOR_MAIN_MENU_SET_ANGLE.getValue());
EditorLore.updateVectorDescription(angleItem, targetHat.getAngle(),
Message.EDITOR_MAIN_MENU_VECTOR_DESCRIPTION);
setButton(24, angleItem, (event, slot) -> {
if (event.isLeftClick()) {
EditorAngleMenu editorAngleMenu = new EditorAngleMenu(core, editorManager, owner, () -> {
EditorLore.updateVectorDescription(
getItem(24),
editorManager.getTargetHat().getAngle(),
EditorLore.updateVectorDescription(getItem(24), editorManager.getTargetHat().getAngle(),
Message.EDITOR_MAIN_MENU_VECTOR_DESCRIPTION);
});
menuManager.addMenu(editorAngleMenu);
@@ -570,22 +636,25 @@ public class EditorMainMenu extends AbstractStaticMenu {
targetHat.setAngle(0, 0, 0);
EditorLore.updateVectorDescription(
getItem(24),
editorManager.getTargetHat().getAngle(),
EditorLore.updateVectorDescription(getItem(24), editorManager.getTargetHat().getAngle(),
Message.EDITOR_MAIN_MENU_VECTOR_DESCRIPTION);
}
return MenuClickResult.NEUTRAL;
});
// Offset.
ItemStack offsetItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_OFFSET.getValue());
ItemStack offsetItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_OFFSET.getValue());
EditorLore.updateOffsetDescription(offsetItem, targetHat);
setButton(25, offsetItem, (event, slot) -> {
EditorOffsetMenu editorOffsetMenu = new EditorOffsetMenu(core, editorManager, owner, () -> {
EditorLore.updateOffsetDescription(getItem(25), editorManager.getTargetHat());
});
menuManager.addMenu(editorOffsetMenu);
@@ -593,13 +662,15 @@ public class EditorMainMenu extends AbstractStaticMenu {
editorOffsetMenu.open();
return MenuClickResult.NEUTRAL;
});
// Tracking.
ItemStack trackingItem =
ItemUtil.createItem(Material.COMPASS, 1, Message.EDITOR_MAIN_MENU_SET_TRACKING_METHOD.getValue());
ItemStack trackingItem = ItemUtil.createItem(Material.COMPASS, 1,
Message.EDITOR_MAIN_MENU_SET_TRACKING_METHOD.getValue());
EditorLore.updateTrackingDescription(trackingItem, targetHat);
setButton(trackingButtonSlot, trackingItem, (event, slot) -> {
List<ParticleTracking> methods = targetHat.getEffect().getSupportedTrackingMethods();
final int increment = event.isLeftClick() ? 1 : -1;
@@ -611,23 +682,26 @@ public class EditorMainMenu extends AbstractStaticMenu {
EditorLore.updateTrackingDescription(getItem(trackingButtonSlot), targetHat);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
// Count.
ItemStack countItem = ItemUtil.createItem(
CompatibleMaterial.WHEAT_SEEDS.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_COUNT.getValue());
EditorLore.updateIntegerDescription(
countItem, targetHat.getCount(), Message.EDITOR_MAIN_MENU_COUNT_DESCRIPTION);
ItemStack countItem = ItemUtil.createItem(CompatibleMaterial.WHEAT_SEEDS.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_COUNT.getValue());
EditorLore.updateIntegerDescription(countItem, targetHat.getCount(),
Message.EDITOR_MAIN_MENU_COUNT_DESCRIPTION);
setButton(countButtonSlot, countItem, (event, slot) -> {
final int increment = event.isLeftClick() ? 1 : -1;
final int count = targetHat.getCount() + increment;
targetHat.setCount(count);
EditorLore.updateIntegerDescription(
getItem(countButtonSlot), targetHat.getCount(), Message.EDITOR_MAIN_MENU_COUNT_DESCRIPTION);
EditorLore.updateIntegerDescription(getItem(countButtonSlot), targetHat.getCount(),
Message.EDITOR_MAIN_MENU_COUNT_DESCRIPTION);
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
// Particle.
@@ -635,15 +709,17 @@ public class EditorMainMenu extends AbstractStaticMenu {
if (targetHat.getEffect().getParticlesSupported() == 1) {
EditorLore.updateParticleDescription(particleItem, targetHat, 0);
}
setButton(particleButtonSlot, getParticleItem(), getParticleAction());
// Scale.
ItemStack scaleItem = ItemUtil.createItem(
CompatibleMaterial.PUFFERFISH.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_SCALE.getValue());
ItemStack scaleItem = ItemUtil.createItem(CompatibleMaterial.PUFFERFISH.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_SCALE.getValue());
EditorLore.updateDoubleDescription(scaleItem, targetHat.getScale(), Message.EDITOR_MAIN_MENU_SCALE_DESCRIPTION);
setButton(scaleItemButtonSlot, scaleItem, (event, slot) -> {
double normalClick = event.isLeftClick() ? 0.1f : -0.1f;
double shiftClick = event.isShiftClick() ? 10 : 1;
double modifier = normalClick * shiftClick;
@@ -652,17 +728,21 @@ public class EditorMainMenu extends AbstractStaticMenu {
double scale = isMiddleClick ? 1 : targetHat.getScale() + modifier;
targetHat.setScale(scale);
EditorLore.updateDoubleDescription(
getItem(scaleItemButtonSlot), targetHat.getScale(), Message.EDITOR_MAIN_MENU_SCALE_DESCRIPTION);
EditorLore.updateDoubleDescription(getItem(scaleItemButtonSlot), targetHat.getScale(),
Message.EDITOR_MAIN_MENU_SCALE_DESCRIPTION);
if (isMiddleClick) {
return MenuClickResult.NEUTRAL;
} else {
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
}
});
}
@Override
@@ -675,7 +755,9 @@ public class EditorMainMenu extends AbstractStaticMenu {
if (targetHat.getParticleData(0).hasPropertyChanges()) {
database.saveParticleData(editorManager.getMenuName(), targetHat, 0);
}
}
if (!forced) {
@@ -684,6 +766,7 @@ public class EditorMainMenu extends AbstractStaticMenu {
if (hat == null) {
return;
}
String name = editorManager.getMenuName();
@@ -695,6 +778,7 @@ public class EditorMainMenu extends AbstractStaticMenu {
database.saveHat(name, targetSlot, hat);
hat.clearPropertyChanges();
}
if (hat.getNodeCount() > 0) {
@@ -706,17 +790,25 @@ public class EditorMainMenu extends AbstractStaticMenu {
database.saveNode(name, node.getIndex(), node);
node.clearPropertyChanges();
}
}
}
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
/**
* Returns an appropriate item for the current ParticleType
*
* @return
*/
private ItemStack getParticleItem() {
@@ -727,18 +819,22 @@ public class EditorMainMenu extends AbstractStaticMenu {
if (particlesSupported == 0) {
return noParticleItem;
}
if (particlesSupported == 1) {
return singleParticleItem;
}
return multipleParticlesItem;
}
/**
* Returns an appropriate EditorAction for the current ParticleType
*
* @return
*/
private MenuAction getParticleAction() {
@@ -749,112 +845,137 @@ public class EditorMainMenu extends AbstractStaticMenu {
if (particlesSupported == 0) {
return noParticle4U;
}
if (particlesSupported == 1) {
return setParticleAction;
}
return editParticleAction;
}
public void onParticleEdit(ItemStack item, int particleIndex) {
ParticleEffect pe = targetHat.getParticle(particleIndex);
switch (pe.getProperty()) {
case NO_DATA:
break;
case COLOR:
case COLOR_TRANSITION:
case DUST_OPTIONS:
{
EditorColorMenu editorColorMenu =
new EditorColorMenu(core, editorManager, owner, particleIndex, () -> {
EditorLore.updateParticleDescription(item, targetHat, particleIndex);
});
case DUST_OPTIONS: {
menuManager.addMenu(editorColorMenu);
EditorColorMenu editorColorMenu = new EditorColorMenu(core, editorManager, owner, particleIndex, () -> {
editorColorMenu.open();
}
EditorLore.updateParticleDescription(item, targetHat, particleIndex);
});
menuManager.addMenu(editorColorMenu);
editorColorMenu.open();
}
break;
case BLOCK_DATA:
{
Message menuTitle = Message.EDITOR_ICON_MENU_BLOCK_TITLE;
Message blockTitle = Message.EDITOR_ICON_MENU_BLOCK_INFO;
Message blockDescription = Message.EDITOR_ICON_MENU_BLOCK_DESCRIPTION;
case BLOCK_DATA: {
EditorItemPromptMenu editorItemMenu = new EditorItemPromptMenu(
core, editorManager, owner, menuTitle, blockTitle, blockDescription, (clickedItem) -> {
menuManager.closeCurrentMenu();
Message menuTitle = Message.EDITOR_ICON_MENU_BLOCK_TITLE;
Message blockTitle = Message.EDITOR_ICON_MENU_BLOCK_INFO;
Message blockDescription = Message.EDITOR_ICON_MENU_BLOCK_DESCRIPTION;
if (clickedItem == null) {
EditorItemPromptMenu editorItemMenu = new EditorItemPromptMenu(core, editorManager, owner, menuTitle,
blockTitle, blockDescription, (clickedItem) ->
{
return;
}
menuManager.closeCurrentMenu();
ItemStack i = (ItemStack) clickedItem;
if (!i.getType().isBlock()) {
if (clickedItem == null) {
return;
}
return;
targetHat.setParticleBlock(particleIndex, i);
}
EditorLore.updateParticleDescription(item, targetHat, particleIndex);
});
ItemStack i = (ItemStack) clickedItem;
if (!i.getType().isBlock()) {
menuManager.addMenu(editorItemMenu);
return;
editorItemMenu.open();
}
}
targetHat.setParticleBlock(particleIndex, i);
EditorLore.updateParticleDescription(item, targetHat, particleIndex);
});
menuManager.addMenu(editorItemMenu);
editorItemMenu.open();
}
break;
case ITEM_DATA:
{
Message menuTitle = Message.EDITOR_ICON_MENU_ITEM_TITLE;
Message itemTitle = Message.EDITOR_ICON_MENU_ITEM_INFO;
Message itemDescription = Message.EDITOR_ICON_MENU_ITEM_DESCRIPTION;
case ITEM_DATA: {
EditorItemPromptMenu editorItemMenu = new EditorItemPromptMenu(
core, editorManager, owner, menuTitle, itemTitle, itemDescription, (clickedItem) -> {
menuManager.closeCurrentMenu();
Message menuTitle = Message.EDITOR_ICON_MENU_ITEM_TITLE;
Message itemTitle = Message.EDITOR_ICON_MENU_ITEM_INFO;
Message itemDescription = Message.EDITOR_ICON_MENU_ITEM_DESCRIPTION;
if (clickedItem == null) {
EditorItemPromptMenu editorItemMenu = new EditorItemPromptMenu(core, editorManager, owner, menuTitle,
itemTitle, itemDescription, (clickedItem) ->
{
return;
}
menuManager.closeCurrentMenu();
ItemStack i = (ItemStack) clickedItem;
if (i.getType().isBlock()) {
if (clickedItem == null) {
return;
}
return;
targetHat.setParticleItem(particleIndex, i);
}
EditorLore.updateParticleDescription(item, targetHat, particleIndex);
});
ItemStack i = (ItemStack) clickedItem;
if (i.getType().isBlock()) {
menuManager.addMenu(editorItemMenu);
return;
editorItemMenu.open();
}
}
targetHat.setParticleItem(particleIndex, i);
EditorLore.updateParticleDescription(item, targetHat, particleIndex);
});
menuManager.addMenu(editorItemMenu);
editorItemMenu.open();
}
break;
case ITEMSTACK_DATA:
{
EditorItemStackMenu editorItemStackMenu =
new EditorItemStackMenu(core, editorManager, owner, particleIndex, () -> {
EditorLore.updateParticleDescription(item, targetHat, particleIndex);
});
case ITEMSTACK_DATA: {
menuManager.addMenu(editorItemStackMenu);
EditorItemStackMenu editorItemStackMenu = new EditorItemStackMenu(core, editorManager, owner,
particleIndex, () ->
{
editorItemStackMenu.open();
}
EditorLore.updateParticleDescription(item, targetHat, particleIndex);
});
menuManager.addMenu(editorItemStackMenu);
editorItemStackMenu.open();
}
break;
default:
break;
}
}
}
@@ -32,12 +32,9 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
private boolean isAddingMenu = false;
public EditorMenuSelectionMenu(
CosmeticsOG core,
EditorMenuManager menuManager,
Player owner,
boolean transferringHat,
MenuObjectCallback callback) {
public EditorMenuSelectionMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner,
boolean transferringHat, MenuObjectCallback callback)
{
super(core, menuManager, owner, false);
@@ -45,29 +42,36 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
this.isTransferringHat = transferringHat;
this.loadedMenus = new HashMap<String, String>();
this.storedMenus = new HashMap<Integer, String>();
this.totalPages =
MathUtil.calculatePageCount(core.getDatabase().getMenus(false).size(), 28);
this.totalPages = MathUtil.calculatePageCount(core.getDatabase().getMenus(false).size(), 28);
this.selectAction = (event, slot) -> {
int index = getClampedIndex(slot, 10, 2) + (28 * currentPage);
if (storedMenus.containsKey(index)) {
callback.onSelect(storedMenus.get(index));
return MenuClickResult.NEUTRAL;
}
return MenuClickResult.NONE;
};
build();
}
@Override
public void insertEmptyItem() {}
public void insertEmptyItem() {
}
@Override
public void removeEmptyItem() {}
public void removeEmptyItem() {
}
@Override
protected void build() {
@@ -76,25 +80,31 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
for (int i = 0; i <= 27; i++) {
setAction(getNormalIndex(i, 10, 2), selectAction);
}
setAction(48, (event, slot) -> {
currentPage--;
open();
return MenuClickResult.NEUTRAL;
});
setAction(50, (event, slot) -> {
currentPage++;
open();
return MenuClickResult.NEUTRAL;
});
setAction(52, (event, slot) -> {
editorManager.getOwnerState().setMetaState(MetaState.NEW_MENU);
core.prompt(owner, MetaState.HAT_NAME);
@@ -104,15 +114,18 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
isAddingMenu = true;
return MenuClickResult.NEUTRAL;
});
// Create menus.
for (int i = 0; i < totalPages; i++) {
menus.put(i, createMenu(i));
}
loadMenus();
}
@Override
@@ -121,21 +134,26 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
if (isAddingMenu) {
rebuild();
}
super.open();
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
public void rebuild() {
int pages =
MathUtil.calculatePageCount(core.getDatabase().getMenus(false).size(), 28);
int pages = MathUtil.calculatePageCount(core.getDatabase().getMenus(false).size(), 28);
if (pages > totalPages) {
totalPages = pages;
@@ -146,23 +164,24 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
if (menu == null) {
return;
}
menu.setItem(
50,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(), 1, Message.EDITOR_MISC_NEXT_PAGE.getValue()));
menu.setItem(50, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
}
loadMenus();
isAddingMenu = false;
}
private Inventory createMenu(int index) {
String menuTitle =
title.replace("{1}", Integer.toString(index + 1)).replace("{2}", Integer.toString(totalPages));
String menuTitle = title.replace("{1}", Integer.toString(index + 1)).replace("{2}",
Integer.toString(totalPages));
Inventory menu = Bukkit.createInventory(null, 54, Utils.legacySerializerAnyCase(menuTitle));
menu.setItem(49, backButtonItem);
@@ -170,35 +189,29 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
// Next Page.
if ((index + 1) < totalPages) {
menu.setItem(
50,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(), 1, Message.EDITOR_MISC_NEXT_PAGE.getValue()));
menu.setItem(50, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
}
// Previous Page.
if ((index + 1) > 1) {
menu.setItem(
48,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
menu.setItem(48, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
}
// Create Menu.
if (!isTransferringHat && owner.hasPermission(Permission.COMMAND_CREATE.getPermission())) {
menu.setItem(
52,
ItemUtil.createItem(
CompatibleMaterial.TURTLE_HELMET.getMaterial(),
1,
Message.EDITOR_MENU_SELECTION_CREATE.getValue()));
menu.setItem(52, ItemUtil.createItem(CompatibleMaterial.TURTLE_HELMET.getMaterial(), 1,
Message.EDITOR_MENU_SELECTION_CREATE.getValue()));
}
return menu;
}
private void loadMenus() {
@@ -207,6 +220,7 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
if (loadedMenus.isEmpty()) {
return;
}
int startingIndex = storedMenus.size();
@@ -224,22 +238,21 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
if (key.equals(currentMenu)) {
continue;
}
// Skip over any menus already loaded.
if (storedMenus.containsValue(key)) {
continue;
}
String name = Message.EDITOR_MENU_SELECTION_MENU_PREFIX.getValue() + key;
ItemStack item = ItemUtil.createItem(Material.BOOK, 1, name);
ItemUtil.setItemDescription(
item,
Utils.legacySerializerAnyCase(Message.EDITOR_MENU_SELECTION_MENU_DESCRIPTION
.getValue()
.replace("{1}", value)));
ItemUtil.setItemDescription(item, Utils.legacySerializerAnyCase(
Message.EDITOR_MENU_SELECTION_MENU_DESCRIPTION.getValue().replace("{1}", value)));
setItem(page, getNormalIndex(index++, 10, 2), item);
@@ -250,7 +263,11 @@ public class EditorMenuSelectionMenu extends AbstractListMenu {
index = 0;
page++;
}
}
}
}
@@ -28,10 +28,11 @@ public class EditorMetaMenu extends AbstractStaticMenu {
this.editorManager = menuManager;
this.targetHat = menuManager.getBaseHat();
this.inventory = Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_META_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_META_MENU_TITLE.getValue()));
build();
}
@Override
@@ -46,6 +47,7 @@ public class EditorMetaMenu extends AbstractStaticMenu {
EditorLore.updatePermissionDeniedDescription(getItem(25), targetHat.getPermissionDeniedDisplayMessage());
super.open();
}
@Override
@@ -54,9 +56,10 @@ public class EditorMetaMenu extends AbstractStaticMenu {
setButton(49, backButtonItem, backButtonAction);
// Name.
ItemStack nameItem = ItemUtil.createItem(
CompatibleMaterial.PLAYER_HEAD.getMaterial(), 1, Message.EDITOR_META_MENU_SET_NAME.getValue());
ItemStack nameItem = ItemUtil.createItem(CompatibleMaterial.PLAYER_HEAD.getMaterial(), 1,
Message.EDITOR_META_MENU_SET_NAME.getValue());
setButton(13, nameItem, (event, slot) -> {
if (event.isLeftClick()) {
editorManager.getOwnerState().setMetaState(MetaState.HAT_NAME);
@@ -70,19 +73,22 @@ public class EditorMetaMenu extends AbstractStaticMenu {
targetHat.setName(Message.EDITOR_MISC_NEW_PARTICLE.getValue());
EditorLore.updateNameDescription(getItem(13), targetHat);
}
return MenuClickResult.NEUTRAL;
});
// Description.
ItemStack descriptionItem = ItemUtil.createItem(
CompatibleMaterial.WRITABLE_BOOK.getMaterial(), 1, Message.EDITOR_META_MENU_SET_DESCRIPTION.getValue());
ItemStack descriptionItem = ItemUtil.createItem(CompatibleMaterial.WRITABLE_BOOK.getMaterial(), 1,
Message.EDITOR_META_MENU_SET_DESCRIPTION.getValue());
setButton(11, descriptionItem, (event, slot) -> {
if (event.isLeftClick()) {
EditorDescriptionMenu editorDescriptionMenu =
new EditorDescriptionMenu(core, editorManager, owner, true);
EditorDescriptionMenu editorDescriptionMenu = new EditorDescriptionMenu(core, editorManager, owner,
true);
menuManager.addMenu(editorDescriptionMenu);
@@ -99,20 +105,24 @@ public class EditorMetaMenu extends AbstractStaticMenu {
database.saveMetaData(menuName, targetHat, DataType.DESCRIPTION, 0);
EditorLore.updateDescriptionDescription(getItem(11), targetHat.getDescription());
}
}
return MenuClickResult.NEUTRAL;
});
// Permission description.
ItemStack permissionDescriptionItem =
ItemUtil.createItem(Material.BOOK, 1, Message.EDITOR_META_MENU_SET_PERMISSION_DESCRIPTION.getValue());
ItemStack permissionDescriptionItem = ItemUtil.createItem(Material.BOOK, 1,
Message.EDITOR_META_MENU_SET_PERMISSION_DESCRIPTION.getValue());
setButton(19, permissionDescriptionItem, (event, slot) -> {
if (event.isLeftClick()) {
EditorDescriptionMenu editorDescriptionMenu =
new EditorDescriptionMenu(core, editorManager, owner, false);
EditorDescriptionMenu editorDescriptionMenu = new EditorDescriptionMenu(core, editorManager, owner,
false);
menuManager.addMenu(editorDescriptionMenu);
@@ -129,16 +139,20 @@ public class EditorMetaMenu extends AbstractStaticMenu {
database.saveMetaData(menuName, targetHat, DataType.PERMISSION_DESCRIPTION, 0);
EditorLore.updateDescriptionDescription(getItem(19), targetHat.getPermissionDescription());
}
}
return MenuClickResult.NEUTRAL;
});
// Permission.
ItemStack permissionItem =
ItemUtil.createItem(Material.PAPER, 1, Message.EDITOR_META_MENU_SET_PERMISSION.getValue());
ItemStack permissionItem = ItemUtil.createItem(Material.PAPER, 1,
Message.EDITOR_META_MENU_SET_PERMISSION.getValue());
setButton(15, permissionItem, (event, slot) -> {
editorManager.getOwnerState().setMetaState(MetaState.HAT_PERMISSION);
core.prompt(owner, MetaState.HAT_PERMISSION);
@@ -146,11 +160,13 @@ public class EditorMetaMenu extends AbstractStaticMenu {
menuManager.closeInventory();
return MenuClickResult.NEUTRAL;
});
// Label.
ItemStack labelItem = ItemUtil.createItem(Material.NAME_TAG, 1, Message.EDITOR_META_MENU_SET_LABEL.getValue());
setButton(29, labelItem, (event, slot) -> {
if (event.isLeftClick()) {
editorManager.getOwnerState().setMetaState(MetaState.HAT_LABEL);
@@ -166,15 +182,18 @@ public class EditorMetaMenu extends AbstractStaticMenu {
targetHat.removeLabel();
EditorLore.updateLabelDescription(getItem(29), targetHat.getLabel());
}
return MenuClickResult.NEUTRAL;
});
// Equip.
ItemStack equipItem =
ItemUtil.createItem(Material.LEATHER_HELMET, 1, Message.EDITOR_META_MENU_SET_EQUIP_MESSAGE.getValue());
ItemStack equipItem = ItemUtil.createItem(Material.LEATHER_HELMET, 1,
Message.EDITOR_META_MENU_SET_EQUIP_MESSAGE.getValue());
setButton(33, equipItem, (event, slot) -> {
if (event.isLeftClick()) {
editorManager.getOwnerState().setMetaState(MetaState.HAT_EQUIP_MESSAGE);
@@ -188,15 +207,18 @@ public class EditorMetaMenu extends AbstractStaticMenu {
targetHat.removeEquipMessage();
EditorLore.updateEquipDescription(getItem(33), targetHat.getEquipDisplayMessage());
}
return MenuClickResult.NEUTRAL;
});
// Permission denied.
ItemStack permissionDeniedItem = ItemUtil.createItem(
CompatibleMaterial.MAP.getMaterial(), 1, Message.EDITOR_META_MENU_SET_PERMISSION_MESSAGE.getValue());
ItemStack permissionDeniedItem = ItemUtil.createItem(CompatibleMaterial.MAP.getMaterial(), 1,
Message.EDITOR_META_MENU_SET_PERMISSION_MESSAGE.getValue());
setButton(25, permissionDeniedItem, (event, slot) -> {
if (event.isLeftClick()) {
editorManager.getOwnerState().setMetaState(MetaState.HAT_PERMISSION_MESSAGE);
@@ -209,28 +231,38 @@ public class EditorMetaMenu extends AbstractStaticMenu {
targetHat.removePermissionDeniedMessage();
EditorLore.updatePermissionDeniedDescription(
getItem(25), targetHat.getPermissionDeniedDisplayMessage());
EditorLore.updatePermissionDeniedDescription(getItem(25),
targetHat.getPermissionDeniedDisplayMessage());
}
return MenuClickResult.NEUTRAL;
});
// Tags.
ItemStack tagItem = ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_META_MENU_SET_TAG.getValue());
setButton(31, tagItem, (event, slot) -> {
EditorTagMenuOverview editorTagMenuOverview = new EditorTagMenuOverview(core, editorManager, owner);
menuManager.addMenu(editorTagMenuOverview);
editorTagMenuOverview.open();
return MenuClickResult.NEUTRAL;
});
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -12,13 +12,14 @@ public class EditorNodeMainMenu extends EditorMainMenu {
public EditorNodeMainMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner) {
super(core, menuManager, owner);
}
@Override
public void build() {
this.inventory = Bukkit.createInventory(
null, 45, Utils.legacySerializerAnyCase(Message.EDITOR_MAIN_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 45,
Utils.legacySerializerAnyCase(Message.EDITOR_MAIN_MENU_TITLE.getValue()));
this.particleButtonSlot = 13;
this.trackingButtonSlot = 19;
this.countButtonSlot = 15;
@@ -27,5 +28,7 @@ public class EditorNodeMainMenu extends EditorMainMenu {
buildSection();
setButton(38, backButtonItem, backButtonAction);
}
}
@@ -21,8 +21,8 @@ public class EditorNodeMenuOverview extends AbstractListMenu {
private final EditorMenuManager editorManager;
private final Hat targetHat;
private final String nodeTitle = Message.EDITOR_NODE_OVERVIEW_NODE_TITLE.getValue();
private final ItemStack emptyItem = ItemUtil.createItem(
CompatibleMaterial.BARRIER.getMaterial(), 1, Message.EDITOR_NODE_OVERVIEW_MENU_EMPTY.getValue());
private final ItemStack emptyItem = ItemUtil.createItem(CompatibleMaterial.BARRIER.getMaterial(), 1,
Message.EDITOR_NODE_OVERVIEW_MENU_EMPTY.getValue());
public EditorNodeMenuOverview(CosmeticsOG core, EditorMenuManager menuManager, Player owner) {
@@ -32,24 +32,25 @@ public class EditorNodeMenuOverview extends AbstractListMenu {
this.targetHat = menuManager.getBaseHat();
this.totalPages = 1;
setMenu(
0,
Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_NODE_OVERVIEW_MENU_TITLE.getValue())));
setMenu(0, Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_NODE_OVERVIEW_MENU_TITLE.getValue())));
build();
}
@Override
public void insertEmptyItem() {
setButton(0, 22, emptyItem, emptyAction);
}
@Override
public void removeEmptyItem() {
setButton(0, 22, null, emptyAction);
}
@Override
@@ -57,16 +58,16 @@ public class EditorNodeMenuOverview extends AbstractListMenu {
setButton(0, 46, backButtonItem, backButtonAction);
ItemStack addItem = ItemUtil.createItem(
CompatibleMaterial.TURTLE_HELMET.getMaterial(),
1,
ItemStack addItem = ItemUtil.createItem(CompatibleMaterial.TURTLE_HELMET.getMaterial(), 1,
Message.EDITOR_NODE_OVERVIEW_MENU_ADD_NODE.getValue());
setButton(0, 52, addItem, (event, slot) -> {
List<Hat> nodes = targetHat.getNodes();
int size = nodes.size();
if (size >= 28) {
return MenuClickResult.NONE;
}
int index = size > 0 ? nodes.get(size - 1).getIndex() + 1 : 0;
@@ -78,9 +79,7 @@ public class EditorNodeMenuOverview extends AbstractListMenu {
nodes.add(node);
String title = nodeTitle.replace("{1}", Integer.toString(size + 1));
ItemStack item = ItemUtil.createItem(
Material.LEATHER_HELMET,
title,
ItemStack item = ItemUtil.createItem(Material.LEATHER_HELMET, title,
StringUtil.parseDescription(Message.EDITOR_NODE_OVERVIEW_MENU_NODE_DESCRIPTION.getValue()));
setItem(0, getNormalIndex(size, 10, 2), item);
@@ -88,9 +87,11 @@ public class EditorNodeMenuOverview extends AbstractListMenu {
setEmpty(false);
return MenuClickResult.NEUTRAL;
});
MenuAction editAction = (event, slot) -> {
if (event.isLeftClick()) {
int index = getClampedIndex(slot, 10, 2);
@@ -98,6 +99,7 @@ public class EditorNodeMenuOverview extends AbstractListMenu {
if (node == null) {
return MenuClickResult.NONE;
}
editorManager.setTargetNode(node);
@@ -110,14 +112,17 @@ public class EditorNodeMenuOverview extends AbstractListMenu {
} else if (event.isShiftRightClick()) {
deleteSlot(0, slot);
}
return MenuClickResult.NEUTRAL;
};
for (int i = 0; i < 28; i++) {
setAction(getNormalIndex(i, 10, 2), editAction);
}
List<Hat> hatNodes = targetHat.getNodes();
@@ -126,30 +131,34 @@ public class EditorNodeMenuOverview extends AbstractListMenu {
setEmpty(true);
return;
}
for (int i = 0; i < hatNodes.size(); i++) {
String title = nodeTitle.replace("{1}", Integer.toString(i + 1));
ItemStack item = ItemUtil.createItem(
Material.LEATHER_HELMET,
title,
ItemStack item = ItemUtil.createItem(Material.LEATHER_HELMET, title,
StringUtil.parseDescription(Message.EDITOR_NODE_OVERVIEW_MENU_NODE_DESCRIPTION.getValue()));
EditorLore.updateHatDescription(item, hatNodes.get(i), false);
setItem(0, getNormalIndex(i, 10, 2), item);
}
}
@Override
public void onClose(boolean forced) {
editorManager.setTargetNode(null);
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
@Override
public void deleteSlot(int page, int slot) {
@@ -167,14 +176,19 @@ public class EditorNodeMenuOverview extends AbstractListMenu {
if (item == null) {
continue;
}
ItemUtil.setItemName(item, nodeTitle.replace("{1}", Integer.toString(i + 1)));
}
if (targetHat.getNodes().size() == 0) {
setEmpty(true);
}
}
}
@@ -25,10 +25,11 @@ public class EditorOffsetMenu extends AbstractStaticMenu {
this.editorManager = menuManager;
this.callback = callback;
this.inventory = Bukkit.createInventory(
null, 45, Utils.legacySerializerAnyCase(Message.EDITOR_OFFSET_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 45,
Utils.legacySerializerAnyCase(Message.EDITOR_OFFSET_MENU_TITLE.getValue()));
build();
}
@Override
@@ -36,67 +37,74 @@ public class EditorOffsetMenu extends AbstractStaticMenu {
Hat targetHat = editorManager.getTargetHat();
// X Offset.
ItemStack xItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_OFFSET_MENU_SET_OFFSET_X.getValue());
EditorLore.updateVectorDescription(
xItem, targetHat.getOffset(), Message.EDITOR_OFFSET_MENU_OFFSET_X_DESCRIPTION);
ItemStack xItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_OFFSET_MENU_SET_OFFSET_X.getValue());
EditorLore.updateVectorDescription(xItem, targetHat.getOffset(),
Message.EDITOR_OFFSET_MENU_OFFSET_X_DESCRIPTION);
setButton(14, xItem, (event, slot) -> {
return updateOffset(event, targetHat, VectorAxis.X, false);
});
// Y Offset.
ItemStack yItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_OFFSET_MENU_SET_OFFSET_Y.getValue());
EditorLore.updateVectorDescription(
yItem, targetHat.getOffset(), Message.EDITOR_OFFSET_MENU_OFFSET_Y_DESCRIPTION);
ItemStack yItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_OFFSET_MENU_SET_OFFSET_Y.getValue());
EditorLore.updateVectorDescription(yItem, targetHat.getOffset(),
Message.EDITOR_OFFSET_MENU_OFFSET_Y_DESCRIPTION);
setButton(15, yItem, (event, slot) -> {
return updateOffset(event, targetHat, VectorAxis.Y, false);
});
// Z Offset.
ItemStack zItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_OFFSET_MENU_SET_OFFSET_Z.getValue());
EditorLore.updateVectorDescription(
zItem, targetHat.getOffset(), Message.EDITOR_OFFSET_MENU_OFFSET_Z_DESCRIPTION);
ItemStack zItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_OFFSET_MENU_SET_OFFSET_Z.getValue());
EditorLore.updateVectorDescription(zItem, targetHat.getOffset(),
Message.EDITOR_OFFSET_MENU_OFFSET_Z_DESCRIPTION);
setButton(16, zItem, (event, slot) -> {
return updateOffset(event, targetHat, VectorAxis.Z, false);
});
// Random X Offset.
ItemStack rxItem = ItemUtil.createItem(
CompatibleMaterial.COMPARATOR.getMaterial(),
1,
ItemStack rxItem = ItemUtil.createItem(CompatibleMaterial.COMPARATOR.getMaterial(), 1,
Message.EDITOR_OFFSET_MENU_SET_RANDOM_OFFSET_X.getValue());
EditorLore.updateVectorDescription(
rxItem, targetHat.getRandomOffset(), Message.EDITOR_OFFSET_MENU_OFFSET_X_DESCRIPTION);
EditorLore.updateVectorDescription(rxItem, targetHat.getRandomOffset(),
Message.EDITOR_OFFSET_MENU_OFFSET_X_DESCRIPTION);
setButton(32, rxItem, (event, slot) -> {
return updateOffset(event, targetHat, VectorAxis.X, true);
});
// Random Y Offset.
ItemStack ryItem = ItemUtil.createItem(
CompatibleMaterial.COMPARATOR.getMaterial(),
1,
ItemStack ryItem = ItemUtil.createItem(CompatibleMaterial.COMPARATOR.getMaterial(), 1,
Message.EDITOR_OFFSET_MENU_SET_RANDOM_OFFSET_Y.getValue());
EditorLore.updateVectorDescription(
ryItem, targetHat.getRandomOffset(), Message.EDITOR_OFFSET_MENU_OFFSET_Y_DESCRIPTION);
EditorLore.updateVectorDescription(ryItem, targetHat.getRandomOffset(),
Message.EDITOR_OFFSET_MENU_OFFSET_Y_DESCRIPTION);
setButton(33, ryItem, (event, slot) -> {
return updateOffset(event, targetHat, VectorAxis.Y, true);
});
// Random Z Offset.
ItemStack rzItem = ItemUtil.createItem(
CompatibleMaterial.COMPARATOR.getMaterial(),
1,
ItemStack rzItem = ItemUtil.createItem(CompatibleMaterial.COMPARATOR.getMaterial(), 1,
Message.EDITOR_OFFSET_MENU_SET_RANDOM_OFFSET_Z.getValue());
EditorLore.updateVectorDescription(
rzItem, targetHat.getRandomOffset(), Message.EDITOR_OFFSET_MENU_OFFSET_Z_DESCRIPTION);
EditorLore.updateVectorDescription(rzItem, targetHat.getRandomOffset(),
Message.EDITOR_OFFSET_MENU_OFFSET_Z_DESCRIPTION);
setButton(34, rzItem, (event, slot) -> {
return updateOffset(event, targetHat, VectorAxis.Z, true);
});
// Back.
setButton(19, backButtonItem, backButtonAction);
}
@Override
@@ -105,11 +113,15 @@ public class EditorOffsetMenu extends AbstractStaticMenu {
if (!forced) {
callback.onCallback();
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
private MenuClickResult updateOffset(MenuClickEvent event, Hat hat, VectorAxis axis, boolean random) {
@@ -125,7 +137,9 @@ public class EditorOffsetMenu extends AbstractStaticMenu {
int zslot = random ? 34 : 16;
switch (axis) {
case X: {
double xo = !isMiddleClick ? offset.getX() + modifier : 0;
if (random) {
@@ -134,11 +148,14 @@ public class EditorOffsetMenu extends AbstractStaticMenu {
} else {
hat.setOffsetX(xo);
}
break;
}
case Y: {
double yo = !isMiddleClick ? offset.getY() + modifier : 0;
if (random) {
@@ -147,11 +164,14 @@ public class EditorOffsetMenu extends AbstractStaticMenu {
} else {
hat.setOffsetY(yo);
}
break;
}
case Z: {
double zo = !isMiddleClick ? offset.getZ() + modifier : 0;
if (random) {
@@ -160,10 +180,13 @@ public class EditorOffsetMenu extends AbstractStaticMenu {
} else {
hat.setOffsetZ(zo);
}
break;
}
}
EditorLore.updateVectorDescription(getItem(xslot), offset, Message.EDITOR_OFFSET_MENU_OFFSET_X_DESCRIPTION);
@@ -177,12 +200,13 @@ public class EditorOffsetMenu extends AbstractStaticMenu {
} else {
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
}
}
protected enum VectorAxis {
X,
Y,
Z;
X, Y, Z;
}
}
@@ -27,8 +27,9 @@ public class EditorParticleMenuOverview extends AbstractStaticMenu {
private Map<Integer, ParticleEffect> particles;
private Map<Integer, Boolean> modifiedParticles;
public EditorParticleMenuOverview(
CosmeticsOG core, EditorMenuManager menuManager, Player owner, EditorMainMenu editorMainMenu) {
public EditorParticleMenuOverview(CosmeticsOG core, EditorMenuManager menuManager, Player owner,
EditorMainMenu editorMainMenu)
{
super(core, menuManager, owner);
@@ -37,10 +38,11 @@ public class EditorParticleMenuOverview extends AbstractStaticMenu {
this.targetHat = menuManager.getTargetHat();
this.particles = new HashMap<Integer, ParticleEffect>();
this.modifiedParticles = new HashMap<Integer, Boolean>();
this.inventory = Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_PARTICLE_OVERVIEW_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_PARTICLE_OVERVIEW_MENU_TITLE.getValue()));
build();
}
@Override
@@ -49,16 +51,20 @@ public class EditorParticleMenuOverview extends AbstractStaticMenu {
setButton(49, backButtonItem, backButtonAction);
MenuAction editAction = (event, slot) -> {
int particleIndex = getClampedIndex(slot, 10, 2);
if (event.isLeftClick()) {
EditorParticleSelectionMenu editorParticleSelectionMenu =
new EditorParticleSelectionMenu(core, editorManager, owner, particleIndex, (particle) -> {
EditorParticleSelectionMenu editorParticleSelectionMenu = new EditorParticleSelectionMenu(core,
editorManager, owner, particleIndex, (particle) ->
{
menuManager.closeCurrentMenu();
if (particle == null) {
return;
}
ParticleEffect pe = (ParticleEffect) particle;
@@ -77,6 +83,7 @@ public class EditorParticleMenuOverview extends AbstractStaticMenu {
EditorLore.updateParticleDescription(item, targetHat, particleIndex);
modifiedParticles.put(particleIndex, true);
});
menuManager.addMenu(editorParticleSelectionMenu);
@@ -86,14 +93,17 @@ public class EditorParticleMenuOverview extends AbstractStaticMenu {
} else if (event.isRightClick()) {
editorMainMenu.onParticleEdit(getItem(slot), particleIndex);
}
return MenuClickResult.NEUTRAL;
};
for (int i = 0; i < 28; i++) {
setAction(getNormalIndex(i, 10, 2), editAction);
}
String itemTitle = Message.EDITOR_PARTICLE_OVERVIEW_PARTICLE_NAME.getValue();
@@ -111,7 +121,9 @@ public class EditorParticleMenuOverview extends AbstractStaticMenu {
EditorLore.updateParticleDescription(item, targetHat, i);
setItem(getNormalIndex(i, 10, 2), item);
}
}
@Override
@@ -124,7 +136,9 @@ public class EditorParticleMenuOverview extends AbstractStaticMenu {
if (entry.getValue()) {
database.saveParticleData(menuName, targetHat, entry.getKey());
}
}
for (int i = 0; i < targetHat.getType().getParticlesSupported(); i++) {
@@ -132,10 +146,16 @@ public class EditorParticleMenuOverview extends AbstractStaticMenu {
if (targetHat.getParticleData(i).hasPropertyChanges()) {
database.saveParticleData(menuName, targetHat, i);
}
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -46,12 +46,9 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
private int currentColorPage = 0;
private int currentDataPage = 0;
public EditorParticleSelectionMenu(
CosmeticsOG core,
EditorMenuManager menuManager,
Player owner,
int particleIndex,
MenuObjectCallback callback) {
public EditorParticleSelectionMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner, int particleIndex,
MenuObjectCallback callback)
{
super(core, menuManager, owner);
@@ -61,8 +58,8 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
this.particleMenus = new HashMap<Integer, Inventory>();
this.colorFilterMenus = new HashMap<Integer, Inventory>();
this.dataFilterMenus = new HashMap<Integer, Inventory>();
this.recentFilterMenu = Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_PARTICLE_MENU_RECENT_FILTER_TITLE.getValue()));
this.recentFilterMenu = Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_PARTICLE_MENU_RECENT_FILTER_TITLE.getValue()));
this.particles = new HashMap<Integer, ParticleEffect>();
this.colorParticles = new HashMap<Integer, ParticleEffect>();
@@ -76,13 +73,16 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
this.inventory = Bukkit.createInventory(null, 54, Component.text(""));
this.particleSelectionAction = (event, slot) -> {
int index = slot;
switch (menuType) {
case COLOR:
index = slot + (currentColorPage * 45);
if (colorParticles.containsKey(index)) {
callback.onSelect(colorParticles.get(index));
}
break;
@@ -91,6 +91,7 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
if (dataParticles.containsKey(index)) {
callback.onSelect(dataParticles.get(index));
}
break;
@@ -99,6 +100,7 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
if (recentParticles.containsKey(index)) {
callback.onSelect(recentParticles.get(index));
}
break;
@@ -107,13 +109,17 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
if (particles.containsKey(index)) {
callback.onSelect(particles.get(index));
}
}
return MenuClickResult.NEUTRAL;
};
build();
}
@Override
@@ -122,12 +128,14 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
Inventory inventory = particleMenus.get(currentParticlePage);
open(inventory);
}
private void open(Inventory inventory) {
menuManager.isOpeningMenu(this);
owner.openInventory(inventory);
}
@Override
@@ -144,61 +152,67 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
// Recents filter.
recentFilterMenu.setItem(49, backButtonItem);
recentFilterMenu.setItem(
45, ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_NORMAL_FILTER.getValue()));
recentFilterMenu.setItem(
46, ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_COLOUR_FILTER.getValue()));
recentFilterMenu.setItem(
47, ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_DATA_FILTER.getValue()));
recentFilterMenu.setItem(
53,
ItemUtil.createItem(
CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
1,
Message.EDITOR_PARTICLE_MENU_RECENT_FILTER.getValue()));
recentFilterMenu.setItem(45,
ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_NORMAL_FILTER.getValue()));
recentFilterMenu.setItem(46,
ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_COLOUR_FILTER.getValue()));
recentFilterMenu.setItem(47,
ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_DATA_FILTER.getValue()));
recentFilterMenu.setItem(53, ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1,
Message.EDITOR_PARTICLE_MENU_RECENT_FILTER.getValue()));
// Back button.
setAction(49, backButtonAction);
// All particles filter.
setAction(45, (event, slot) -> {
menuType = MenuType.PARTICLES;
open(particleMenus.get(currentParticlePage));
return MenuClickResult.NEUTRAL;
});
// Color filter.
setAction(46, (event, slot) -> {
menuType = MenuType.COLOR;
open(colorFilterMenus.get(currentColorPage));
return MenuClickResult.NEUTRAL;
});
// Data filter.
setAction(47, (event, slot) -> {
menuType = MenuType.DATA;
open(dataFilterMenus.get(currentDataPage));
return MenuClickResult.NEUTRAL;
});
// Recents filter.
setAction(53, (event, slot) -> {
menuType = MenuType.RECENTS;
open(recentFilterMenu);
return MenuClickResult.NEUTRAL;
});
// Previous page.
setAction(48, (event, slot) -> {
switch (menuType) {
case COLOR:
open(colorFilterMenus.get(--currentColorPage));
@@ -209,14 +223,18 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
break;
default:
open(particleMenus.get(--currentParticlePage));
}
return MenuClickResult.NEUTRAL;
});
// Next page.
setAction(50, (event, slot) -> {
switch (menuType) {
case COLOR:
open(colorFilterMenus.get(++currentColorPage));
@@ -227,14 +245,17 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
break;
default:
open(particleMenus.get(++currentParticlePage));
}
return MenuClickResult.NEUTRAL;
});
for (int i = 0; i < 45; i++) {
setAction(i, particleSelectionAction);
}
ParticleEffect currentEffect = targetHat.getParticle(particleIndex);
@@ -256,6 +277,7 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
if (!pe.isSupported()) {
continue;
}
ItemStack item = pe.getItem().clone();
@@ -267,6 +289,7 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
ItemUtil.highlightItem(item);
isSelected = true;
}
EditorLore.updateParticleItemDescription(item, pe, isSelected);
@@ -275,12 +298,14 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
colorFilterMenus.get(colorPage).setItem(colorItemIndex++, item);
colorParticles.put(colorParticleIndex++, pe);
}
if (pe.hasData()) {
dataFilterMenus.get(dataPage).setItem(dataItemIndex++, item);
dataParticles.put(dataParticleIndex++, pe);
}
particleMenus.get(particlePage).setItem(particleItemIndex++, item);
@@ -291,12 +316,14 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
particleItemIndex = 0;
particlePage++;
}
if (colorItemIndex > 0 && colorItemIndex % 45 == 0) {
colorItemIndex = 0;
colorPage = 0;
}
if (dataItemIndex > 0 && dataItemIndex % 45 == 0) {
@@ -304,7 +331,9 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
dataItemIndex = 0;
dataPage++;
}
}
// Recently used.
@@ -320,25 +349,33 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
ItemUtil.highlightItem(item);
selected = true;
}
EditorLore.updateParticleItemDescription(item, pe, selected);
recentParticles.put(index, pe);
recentFilterMenu.setItem(getNormalIndex(index++, 10, 2), item);
}
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
@Override
public boolean hasInventory(Inventory inventory) {
switch (menuType) {
case COLOR:
return colorFilterMenus.containsValue(inventory);
case DATA:
@@ -347,87 +384,71 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
return recentFilterMenu.equals(inventory);
default:
return particleMenus.containsValue(inventory);
}
}
private void generateMenus(Map<Integer, Inventory> pages, Message title, int totalPages, MenuType type) {
for (int i = 0; i < totalPages; i++) {
String menuTitle =
title.replace("{1}", Integer.toString(i + 1)).replace("{2}", Integer.toString(totalPages));
String menuTitle = title.replace("{1}", Integer.toString(i + 1)).replace("{2}",
Integer.toString(totalPages));
Inventory inventory = Bukkit.createInventory(null, 54, Utils.legacySerializerAnyCase(menuTitle));
inventory.setItem(49, backButtonItem);
inventory.setItem(
45, ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_NORMAL_FILTER.getValue()));
inventory.setItem(
46, ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_COLOUR_FILTER.getValue()));
inventory.setItem(
47, ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_DATA_FILTER.getValue()));
inventory.setItem(
53, ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_RECENT_FILTER.getValue()));
inventory.setItem(45,
ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_NORMAL_FILTER.getValue()));
inventory.setItem(46,
ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_COLOUR_FILTER.getValue()));
inventory.setItem(47,
ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_DATA_FILTER.getValue()));
inventory.setItem(53,
ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_PARTICLE_MENU_RECENT_FILTER.getValue()));
if ((i + 1) < totalPages) {
inventory.setItem(
50,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
inventory.setItem(50, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
}
if ((i + 1) > 1) {
inventory.setItem(
48,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
inventory.setItem(48, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
}
switch (type) {
case COLOR:
inventory.setItem(
46,
ItemUtil.createItem(
CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
1,
Message.EDITOR_PARTICLE_MENU_COLOUR_FILTER.getValue()));
inventory.setItem(46, ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1,
Message.EDITOR_PARTICLE_MENU_COLOUR_FILTER.getValue()));
break;
case DATA:
inventory.setItem(
47,
ItemUtil.createItem(
CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
1,
Message.EDITOR_PARTICLE_MENU_DATA_FILTER.getValue()));
inventory.setItem(47, ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1,
Message.EDITOR_PARTICLE_MENU_DATA_FILTER.getValue()));
break;
case RECENTS:
inventory.setItem(
53,
ItemUtil.createItem(
CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
1,
Message.EDITOR_PARTICLE_MENU_RECENT_FILTER.getValue()));
inventory.setItem(53, ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1,
Message.EDITOR_PARTICLE_MENU_RECENT_FILTER.getValue()));
break;
default:
inventory.setItem(
45,
ItemUtil.createItem(
CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
1,
Message.EDITOR_PARTICLE_MENU_NORMAL_FILTER.getValue()));
inventory.setItem(45, ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1,
Message.EDITOR_PARTICLE_MENU_NORMAL_FILTER.getValue()));
break;
}
pages.put(i, inventory);
}
}
private int getParticleCountWithTag(MenuType type) {
@@ -438,13 +459,16 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
if (!pe.isSupported()) {
continue;
}
switch (type) {
case COLOR:
if (pe.hasColorData()) {
count++;
}
break;
@@ -452,21 +476,23 @@ public class EditorParticleSelectionMenu extends AbstractStaticMenu {
if (pe.hasData()) {
count++;
}
break;
default:
count++;
}
}
return count;
}
private enum MenuType {
PARTICLES,
COLOR,
DATA,
RECENTS;
PARTICLES, COLOR, DATA, RECENTS;
}
}
@@ -34,8 +34,8 @@ public class EditorPotionMenu extends AbstractListMenu {
private final String potionTitle = Message.EDITOR_POTION_MENU_POTION_TITLE.getValue();
private final String potionSelected = Message.EDITOR_POTION_MENU_POTION_DESCRIPTION.getValue();
private final List<String> potionBlacklist =
Arrays.asList("CONFUSION", "HARM", "POISON", "WEAKNESS", "WITHER", "UNLUCK", "HUNGER", "BAD_OMEN");
private final List<String> potionBlacklist = Arrays.asList("CONFUSION", "HARM", "POISON", "WEAKNESS", "WITHER",
"UNLUCK", "HUNGER", "BAD_OMEN");
private List<PotionEffectType> supportedPotions;
private Map<Integer, PotionEffectType> potions;
@@ -55,34 +55,42 @@ public class EditorPotionMenu extends AbstractListMenu {
if (potion == null) {
continue;
}
if (!useBlacklist && potionBlacklist.contains(potion.getName())) {
continue;
}
supportedPotions.add(potion);
}
this.totalPages = MathUtil.calculatePageCount(supportedPotions.size(), 28);
build();
}
@Override
public void insertEmptyItem() {}
public void insertEmptyItem() {
}
@Override
public void removeEmptyItem() {}
public void removeEmptyItem() {
}
@Override
protected void build() {
for (int i = 0; i < totalPages; i++) {
String title =
menuTitle.replace("{1}", Integer.toString(i + 1)).replace("{2}", Integer.toString(totalPages));
String title = menuTitle.replace("{1}", Integer.toString(i + 1)).replace("{2}",
Integer.toString(totalPages));
Inventory menu = Bukkit.createInventory(null, 54, Utils.legacySerializerAnyCase(title));
menu.setItem(49, backButtonItem);
@@ -90,74 +98,77 @@ public class EditorPotionMenu extends AbstractListMenu {
// Next page.
if ((i + 1) < totalPages) {
menu.setItem(
50,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
menu.setItem(50, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
}
// Previous page.
if ((i + 1) > 1) {
menu.setItem(
48,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
menu.setItem(48, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
}
// Potion strength.
menu.setItem(
52,
menu.setItem(52,
ItemUtil.createItem(Material.GHAST_TEAR, 1, Message.EDITOR_POTION_MENU_SET_STRENGTH.getValue()));
EditorLore.updatePotionStrengthDescription(menu.getItem(52), targetHat.getPotion());
setMenu(i, menu);
}
MenuAction selectAction = (event, slot) -> {
int index = getClampedIndex(slot, 10, 2) + (currentPage * 28);
if (potions.containsKey(index)) {
targetHat.setPotion(potions.get(index), targetHat.getPotionAmplifier());
menuManager.closeCurrentMenu();
}
return MenuClickResult.NEUTRAL;
};
for (int i = 0; i < 28; i++) {
setAction(getNormalIndex(i, 10, 2), selectAction);
}
setAction(49, backButtonAction);
// Previous page.
setAction(48, (clickEvent, slot) -> {
currentPage--;
open();
return MenuClickResult.NEUTRAL;
});
// Next page.
setAction(50, (clickEvent, slot) -> {
currentPage++;
open();
return MenuClickResult.NEUTRAL;
});
setAction(52, (event, slot) -> {
int strength = 1;
PotionEffect pe = targetHat.getPotion();
if (pe != null) {
@@ -166,12 +177,14 @@ public class EditorPotionMenu extends AbstractListMenu {
strength += event.isLeftClick() ? 1 : -1;
targetHat.setPotionAmplifier(strength);
}
ItemStack item = menus.get(currentPage).getItem(52);
EditorLore.updatePotionStrengthDescription(item, targetHat.getPotion());
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
});
PotionEffect currentPotion = targetHat.getPotion();
@@ -180,6 +193,7 @@ public class EditorPotionMenu extends AbstractListMenu {
if (currentPotion != null) {
currentType = currentPotion.getType();
}
String[] selectInfo = StringUtil.parseValue(potionSelected, "1");
@@ -198,17 +212,17 @@ public class EditorPotionMenu extends AbstractListMenu {
ItemUtil.highlightItem(item);
String description =
potionSelected.replace(selectInfo[0], "").replace(selectedInfo[0], selectedInfo[1]);
String description = potionSelected.replace(selectInfo[0], "").replace(selectedInfo[0],
selectedInfo[1]);
ItemUtil.setItemDescription(item, StringUtil.parseDescription(description));
} else {
String description =
potionSelected.replace(selectInfo[0], selectInfo[1]).replace(selectedInfo[0], "");
String description = potionSelected.replace(selectInfo[0], selectInfo[1]).replace(selectedInfo[0], "");
ItemUtil.setItemDescription(item, StringUtil.parseDescription(description));
}
menus.get(page).setItem(getNormalIndex(index, 10, 2), item);
@@ -221,8 +235,11 @@ public class EditorPotionMenu extends AbstractListMenu {
index = 0;
page++;
}
}
}
@Override
@@ -231,9 +248,14 @@ public class EditorPotionMenu extends AbstractListMenu {
if (!forced) {
callback.onCallback();
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -23,22 +23,25 @@ public class EditorResizeMenu extends AbstractStaticMenu {
super(core, menuManager, owner);
this.editorBaseMenu = editorBaseMenu;
this.inventory = Bukkit.createInventory(
null, 27, Utils.legacySerializerAnyCase(Message.EDITOR_RESIZE_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 27,
Utils.legacySerializerAnyCase(Message.EDITOR_RESIZE_MENU_TITLE.getValue()));
build();
}
@Override
protected void build() {
final MenuAction resizeAction = (event, slot) -> {
int size = (slot - 10) + (slot < 13 ? 1 : 0);
editorBaseMenu.resizeTo(size);
menuManager.closeCurrentMenu();
return MenuClickResult.NEUTRAL;
};
String title = Message.EDITOR_RESIZE_MENU_SET_ROW_SIZE.getValue();
@@ -50,10 +53,11 @@ public class EditorResizeMenu extends AbstractStaticMenu {
if (i == 3) {
continue;
}
String t = title.replace("{1}", Integer.toString((i + 1) - (i > 3 ? 1 : 0)))
.replace(suffixInfo[0], i == 0 ? "" : suffixInfo[1]);
String t = title.replace("{1}", Integer.toString((i + 1) - (i > 3 ? 1 : 0))).replace(suffixInfo[0],
i == 0 ? "" : suffixInfo[1]);
String description = Message.EDITOR_RESIZE_MENU_SET_ROW_DESCRIPTION.getValue();
List<TextComponent> descriptionList = List.of(Utils.legacySerializerAnyCase(description));
@@ -61,6 +65,7 @@ public class EditorResizeMenu extends AbstractStaticMenu {
ItemStack row = ItemUtil.createItem(CompatibleMaterial.GRAY_DYE.getMaterial(), 1, t, descriptionList);
setButton(i + 10, row, resizeAction);
}
int currentRows = editorBaseMenu.rows();
@@ -69,11 +74,17 @@ public class EditorResizeMenu extends AbstractStaticMenu {
ItemUtil.setItemType(row, CompatibleMaterial.LIME_DYE);
ItemUtil.highlightItem(row);
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -27,8 +27,9 @@ public class EditorSearchMenu extends AbstractListMenu {
private final String menuTitle;
public EditorSearchMenu(
CosmeticsOG core, MenuManager menuManager, Player owner, String searchQuery, MenuObjectCallback callback) {
public EditorSearchMenu(CosmeticsOG core, MenuManager menuManager, Player owner, String searchQuery,
MenuObjectCallback callback)
{
super(core, menuManager, owner, false);
@@ -43,6 +44,7 @@ public class EditorSearchMenu extends AbstractListMenu {
if (blacklist.contains(material)) {
continue;
}
String materialName = material.toString().toLowerCase();
@@ -51,36 +53,43 @@ public class EditorSearchMenu extends AbstractListMenu {
if (materialName.contains(q)) {
matchingResults.add(material);
}
}
}
this.totalPages = MathUtil.calculatePageCount(matchingResults.size(), 45);
this.selectAction = (event, slot) -> {
int index = slot + (currentPage * 45);
if (index < matchingResults.size()) {
callback.onSelect(new ItemStack(matchingResults.get(index)));
}
return MenuClickResult.NEUTRAL;
};
build();
}
@Override
public void insertEmptyItem() {
setItem(
0,
22,
ItemUtil.createItem(
CompatibleMaterial.BARRIER.getMaterial(), 1, Message.EDITOR_SEARCH_MENU_NO_RESULTS.getValue()));
setItem(0, 22, ItemUtil.createItem(CompatibleMaterial.BARRIER.getMaterial(), 1,
Message.EDITOR_SEARCH_MENU_NO_RESULTS.getValue()));
}
@Override
public void removeEmptyItem() {}
public void removeEmptyItem() {
}
@Override
protected void build() {
@@ -90,25 +99,30 @@ public class EditorSearchMenu extends AbstractListMenu {
// Previous page.
setAction(48, (event, slot) -> {
currentPage--;
open();
return MenuClickResult.NEUTRAL;
});
// Next page.
setAction(50, (event, slot) -> {
currentPage++;
open();
return MenuClickResult.NEUTRAL;
});
for (int i = 0; i < 45; i++) {
setAction(i, selectAction);
}
for (int i = 0; i < totalPages; i++) {
@@ -119,25 +133,20 @@ public class EditorSearchMenu extends AbstractListMenu {
if ((i + 1) < totalPages) {
inventory.setItem(
50,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
inventory.setItem(50, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
}
if ((i + 1) > 1) {
inventory.setItem(
48,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
inventory.setItem(48, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
}
setMenu(i, inventory);
}
if (matchingResults.isEmpty()) {
@@ -145,6 +154,7 @@ public class EditorSearchMenu extends AbstractListMenu {
setEmpty(true);
return;
}
int index = 0;
@@ -158,13 +168,21 @@ public class EditorSearchMenu extends AbstractListMenu {
index = 0;
page++;
}
}
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -22,18 +22,20 @@ public class EditorSettingsMenu extends AbstractStaticMenu {
private final EditorBaseMenu editorBaseMenu;
private final MenuInventory menuInventory;
public EditorSettingsMenu(
CosmeticsOG core, EditorMenuManager menuManager, Player owner, EditorBaseMenu editorBaseMenu) {
public EditorSettingsMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner,
EditorBaseMenu editorBaseMenu)
{
super(core, menuManager, owner);
this.editorManager = menuManager;
this.editorBaseMenu = editorBaseMenu;
this.menuInventory = editorBaseMenu.getMenuInventory();
this.inventory = Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_SETTINGS_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_SETTINGS_MENU_TITLE.getValue()));
build();
}
@Override
@@ -43,9 +45,10 @@ public class EditorSettingsMenu extends AbstractStaticMenu {
setButton(49, backButtonItem, backButtonAction);
// Set title.
ItemStack titleItem = ItemUtil.createItem(
CompatibleMaterial.SIGN.getMaterial(), 1, Message.EDITOR_SETTINGS_MENU_SET_TITLE.getValue());
ItemStack titleItem = ItemUtil.createItem(CompatibleMaterial.SIGN.getMaterial(), 1,
Message.EDITOR_SETTINGS_MENU_SET_TITLE.getValue());
setButton(11, titleItem, (event, slot) -> {
editorManager.getOwnerState().setMetaState(MetaState.MENU_TITLE);
core.prompt(owner, MetaState.MENU_TITLE);
@@ -53,12 +56,14 @@ public class EditorSettingsMenu extends AbstractStaticMenu {
menuManager.closeInventory();
return MenuClickResult.NEUTRAL;
});
// Set alias.
ItemStack aliasItem =
ItemUtil.createItem(Material.NAME_TAG, 1, Message.EDITOR_SETTINGS_MENU_SET_ALIAS.getValue());
ItemStack aliasItem = ItemUtil.createItem(Material.NAME_TAG, 1,
Message.EDITOR_SETTINGS_MENU_SET_ALIAS.getValue());
setButton(13, aliasItem, (event, slot) -> {
if (event.isLeftClick()) {
editorManager.getOwnerState().setMetaState(MetaState.MENU_ALIAS);
@@ -74,58 +79,68 @@ public class EditorSettingsMenu extends AbstractStaticMenu {
core.getDatabase().saveMenuAlias(menuInventory.getName(), "NULL");
EditorLore.updateAliasDescription(inventory.getItem(13), menuInventory.getAlias());
}
return MenuClickResult.NEUTRAL;
});
// Set size.
ItemStack sizeItem = ItemUtil.createItem(
CompatibleMaterial.COMPARATOR.getMaterial(), 1, Message.EDITOR_SETTINGS_MENU_SET_SIZE.getValue());
ItemStack sizeItem = ItemUtil.createItem(CompatibleMaterial.COMPARATOR.getMaterial(), 1,
Message.EDITOR_SETTINGS_MENU_SET_SIZE.getValue());
setButton(15, sizeItem, (event, slot) -> {
EditorResizeMenu editorResizeMenu = new EditorResizeMenu(core, menuManager, owner, editorBaseMenu);
menuManager.addMenu(editorResizeMenu);
editorResizeMenu.open();
return MenuClickResult.NEUTRAL;
});
// Toggle live updates.
ItemStack liveItem =
ItemUtil.createItem(Material.LEVER, 1, Message.EDITOR_SETTINGS_MENU_TOGGLE_LIVE_MENU.getValue());
EditorLore.updateBooleanDescription(
liveItem, editorBaseMenu.canUpdate(), Message.EDITOR_SETTINGS_MENU_ANIMATION_DESCRIPTION);
ItemStack liveItem = ItemUtil.createItem(Material.LEVER, 1,
Message.EDITOR_SETTINGS_MENU_TOGGLE_LIVE_MENU.getValue());
EditorLore.updateBooleanDescription(liveItem, editorBaseMenu.canUpdate(),
Message.EDITOR_SETTINGS_MENU_ANIMATION_DESCRIPTION);
setButton(29, liveItem, (event, slot) -> {
editorBaseMenu.toggleUpdates();
EditorLore.updateBooleanDescription(
getItem(29), editorBaseMenu.canUpdate(), Message.EDITOR_SETTINGS_MENU_ANIMATION_DESCRIPTION);
EditorLore.updateBooleanDescription(getItem(29), editorBaseMenu.canUpdate(),
Message.EDITOR_SETTINGS_MENU_ANIMATION_DESCRIPTION);
return MenuClickResult.NEUTRAL;
});
// Sync icons.
ItemStack syncItem = ItemUtil.createItem(
CompatibleMaterial.CONDUIT.getMaterial(),
ItemStack syncItem = ItemUtil.createItem(CompatibleMaterial.CONDUIT.getMaterial(),
Message.EDITOR_SETTINGS_MENU_SYNC_ICONS.getValue(),
StringUtil.parseDescription(Message.EDITOR_SETTINGS_SYNC_DESCRIPTION.getValue()));
setButton(31, syncItem, (event, slot) -> {
editorBaseMenu.syncItems();
return MenuClickResult.NEUTRAL;
});
// Delete.
ItemStack deleteItem = ItemUtil.createItem(Material.TNT, 1, Message.EDITOR_SETTINGS_MENU_DELETE.getValue());
setButton(33, deleteItem, (event, slot) -> {
EditorDeleteMenu editorDeleteMenu = new EditorDeleteMenu(core, menuManager, owner, editorBaseMenu);
menuManager.addMenu(editorDeleteMenu);
editorDeleteMenu.open();
return MenuClickResult.NEUTRAL;
});
}
@Override
@@ -137,20 +152,28 @@ public class EditorSettingsMenu extends AbstractStaticMenu {
if (titleItem != null) {
ItemUtil.setItemDescription(titleItem, StringUtil.parseDescription(title));
}
ItemStack aliasItem = getItem(13);
if (aliasItem != null) {
EditorLore.updateAliasDescription(aliasItem, menuInventory.getAlias());
}
super.open();
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -22,12 +22,9 @@ public class EditorSlotMenu extends AbstractStaticMenu {
private final boolean cloning;
private final int size;
public EditorSlotMenu(
CosmeticsOG core,
EditorMenuManager menuManager,
Player owner,
EditorBaseMenu editorBaseMenu,
boolean cloning) {
public EditorSlotMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner, EditorBaseMenu editorBaseMenu,
boolean cloning)
{
super(core, menuManager, owner);
@@ -35,10 +32,11 @@ public class EditorSlotMenu extends AbstractStaticMenu {
this.editorBaseMenu = editorBaseMenu;
this.cloning = cloning;
this.size = editorBaseMenu.getMenuInventory().getSize();
this.inventory = Bukkit.createInventory(
null, size, Utils.legacySerializerAnyCase(Message.EDITOR_SLOT_MENU_TITlE.getValue()));
this.inventory = Bukkit.createInventory(null, size,
Utils.legacySerializerAnyCase(Message.EDITOR_SLOT_MENU_TITlE.getValue()));
build();
}
@Override
@@ -46,6 +44,7 @@ public class EditorSlotMenu extends AbstractStaticMenu {
int targetSlot = editorManager.getTargetSlot();
final MenuAction selectAction = (event, slot) -> {
if (cloning) {
editorBaseMenu.cloneHat(targetSlot, slot);
@@ -53,6 +52,7 @@ public class EditorSlotMenu extends AbstractStaticMenu {
editorManager.returnToBaseMenu();
return MenuClickResult.NEUTRAL;
}
editorBaseMenu.changeSlots(targetSlot, slot, false);
@@ -60,20 +60,25 @@ public class EditorSlotMenu extends AbstractStaticMenu {
menuManager.closeCurrentMenu();
return MenuClickResult.NEUTRAL;
};
final MenuAction swapAction = (event, slot) -> {
editorBaseMenu.changeSlots(targetSlot, slot, true);
editorManager.returnToBaseMenu();
return MenuClickResult.NEUTRAL;
};
final MenuAction secretAction = (event, slot) -> {
CompatibleSound.ENTITY_VILLAGER_NO.play(owner, 0.5f, 1.0f);
return MenuClickResult.NONE;
};
for (int i = 0; i < size; i++) {
@@ -86,10 +91,9 @@ public class EditorSlotMenu extends AbstractStaticMenu {
} else {
item = ItemUtil.createItem(
CompatibleMaterial.LIGHT_GRAY_STAINED_GLASS_PANE.getMaterial(),
1,
item = ItemUtil.createItem(CompatibleMaterial.LIGHT_GRAY_STAINED_GLASS_PANE.getMaterial(), 1,
Message.EDITOR_SLOT_MENU_SELECT.getValue());
}
String displayName = Message.EDITOR_SLOT_MENU_SELECT.getValue();
@@ -102,6 +106,7 @@ public class EditorSlotMenu extends AbstractStaticMenu {
setAction(i, backButtonAction);
} else if (editorBaseMenu.getMenuInventory().getHat(i) != null) {
if (!cloning) {
displayName = Message.EDITOR_SLOT_MENU_SWAP.getValue();
@@ -113,23 +118,32 @@ public class EditorSlotMenu extends AbstractStaticMenu {
displayName = Message.EDITOR_SLOT_MENU_OCCUPIED.getValue();
setAction(i, secretAction);
}
} else {
setAction(i, selectAction);
}
ItemUtil.setItemName(item, displayName);
ItemUtil.setItemDescription(item, Arrays.asList());
inventory.setItem(i, item);
}
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -52,79 +52,25 @@ public class EditorSoundMenu extends AbstractStaticMenu {
private SoundFilter currentFilter = SoundFilter.MISC;
// Disable sounds that are too long.
private final List<String> blacklist = Arrays.asList(
"MUSIC_CREATIVE",
"MUSIC_CREDITS",
"MUSIC_DRAGON",
"MUSIC_END",
"MUSIC_GAME",
"MUSIC_MENU",
"MUSIC_NETHER",
"MUSIC_NETHER_BASALT_DELTAS",
"MUSIC_NETHER_CRIMSON_FOREST",
"MUSIC_NETHER_NETHER_WASTES",
"MUSIC_NETHER_SOUL_SAND_VALLEY",
"MUSIC_NETHER_WARPED_FOREST",
"MUSIC_UNDER_WATER",
"AMBIENT_CAVE",
"AMBIENT_UNDERWATER_ENTER",
"AMBIENT_UNDERWATER_EXIT",
"AMBIENT_UNDERWATER_LOOP",
"AMBIENT_UNDERWATER_LOOP_ADDITIONS",
"AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE",
"AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE",
"AMBIENT_BASALT_DELTAS_ADDITIONS",
"AMBIENT_BASALT_DELTAS_LOOP",
"AMBIENT_BASALT_DELTAS_MOOD",
"AMBIENT_CAVE",
"AMBIENT_CRIMSON_FOREST_ADDITIONS",
"AMBIENT_CRIMSON_FOREST_LOOP",
"AMBIENT_CRIMSON_FOREST_MOOD",
"AMBIENT_NETHER_WASTES_ADDITIONS",
"AMBIENT_NETHER_WASTES_LOOP",
"AMBIENT_NETHER_WASTES_MOOD",
"AMBIENT_SOUL_SAND_VALLEY_ADDITIONS",
"AMBIENT_SOUL_SAND_VALLEY_LOOP",
"AMBIENT_SOUL_SAND_VALLEY_MOOD",
"AMBIENT_WARPED_FOREST_ADDITIONS",
"AMBIENT_WARPED_FOREST_LOOP",
"AMBIENT_WARPED_FOREST_MOOD",
"ITEM_ELYTRA_FLYING",
"ENTITY_ENDER_DRAGON_DEATH",
"MUSIC_DISC_11",
"MUSIC_DISC_13",
"MUSIC_DISC_BLOCKS",
"MUSIC_DISC_CAT",
"MUSIC_DISC_CHIRP",
"MUSIC_DISC_FAR",
"MUSIC_DISC_MALL",
"MUSIC_DISC_MELLOHI",
"MUSIC_DISC_STAL",
"MUSIC_DISC_STRAD",
"MUSIC_DISC_WAIT",
"MUSIC_DISC_WARD",
"MUSIC_DISC_PIGSTEP",
"MUSIC_DISC_OTHERSIDE",
"MUSIC_OVERWORLD_DRIPSTONE_CAVES",
"MUSIC_OVERWORLD_FROZEN_PEAKS",
"MUSIC_OVERWORLD_GROVE",
"MUSIC_OVERWORLD_JAGGED_PEAKS",
"MUSIC_OVERWORLD_LUSH_CAVES",
"MUSIC_OVERWORLD_MEADOW",
"MUSIC_OVERWORLD_SNOWY_SLOPES",
"MUSIC_OVERWORLD_STONY_PEAKS",
"RECORD_11",
"RECORD_13",
"RECORD_BLOCKS",
"RECORD_CAT",
"RECORD_CHIRP",
"RECORD_FAR",
"RECORD_MALL",
"RECORD_MELLOHI",
"RECORD_STAL",
"RECORD_STRAD",
"RECORD_WAIT",
"RECORD_WARD");
private final List<String> blacklist = Arrays.asList("MUSIC_CREATIVE", "MUSIC_CREDITS", "MUSIC_DRAGON", "MUSIC_END",
"MUSIC_GAME", "MUSIC_MENU", "MUSIC_NETHER", "MUSIC_NETHER_BASALT_DELTAS", "MUSIC_NETHER_CRIMSON_FOREST",
"MUSIC_NETHER_NETHER_WASTES", "MUSIC_NETHER_SOUL_SAND_VALLEY", "MUSIC_NETHER_WARPED_FOREST",
"MUSIC_UNDER_WATER", "AMBIENT_CAVE", "AMBIENT_UNDERWATER_ENTER", "AMBIENT_UNDERWATER_EXIT",
"AMBIENT_UNDERWATER_LOOP", "AMBIENT_UNDERWATER_LOOP_ADDITIONS", "AMBIENT_UNDERWATER_LOOP_ADDITIONS_RARE",
"AMBIENT_UNDERWATER_LOOP_ADDITIONS_ULTRA_RARE", "AMBIENT_BASALT_DELTAS_ADDITIONS",
"AMBIENT_BASALT_DELTAS_LOOP", "AMBIENT_BASALT_DELTAS_MOOD", "AMBIENT_CAVE",
"AMBIENT_CRIMSON_FOREST_ADDITIONS", "AMBIENT_CRIMSON_FOREST_LOOP", "AMBIENT_CRIMSON_FOREST_MOOD",
"AMBIENT_NETHER_WASTES_ADDITIONS", "AMBIENT_NETHER_WASTES_LOOP", "AMBIENT_NETHER_WASTES_MOOD",
"AMBIENT_SOUL_SAND_VALLEY_ADDITIONS", "AMBIENT_SOUL_SAND_VALLEY_LOOP", "AMBIENT_SOUL_SAND_VALLEY_MOOD",
"AMBIENT_WARPED_FOREST_ADDITIONS", "AMBIENT_WARPED_FOREST_LOOP", "AMBIENT_WARPED_FOREST_MOOD",
"ITEM_ELYTRA_FLYING", "ENTITY_ENDER_DRAGON_DEATH", "MUSIC_DISC_11", "MUSIC_DISC_13", "MUSIC_DISC_BLOCKS",
"MUSIC_DISC_CAT", "MUSIC_DISC_CHIRP", "MUSIC_DISC_FAR", "MUSIC_DISC_MALL", "MUSIC_DISC_MELLOHI",
"MUSIC_DISC_STAL", "MUSIC_DISC_STRAD", "MUSIC_DISC_WAIT", "MUSIC_DISC_WARD", "MUSIC_DISC_PIGSTEP",
"MUSIC_DISC_OTHERSIDE", "MUSIC_OVERWORLD_DRIPSTONE_CAVES", "MUSIC_OVERWORLD_FROZEN_PEAKS",
"MUSIC_OVERWORLD_GROVE", "MUSIC_OVERWORLD_JAGGED_PEAKS", "MUSIC_OVERWORLD_LUSH_CAVES",
"MUSIC_OVERWORLD_MEADOW", "MUSIC_OVERWORLD_SNOWY_SLOPES", "MUSIC_OVERWORLD_STONY_PEAKS", "RECORD_11",
"RECORD_13", "RECORD_BLOCKS", "RECORD_CAT", "RECORD_CHIRP", "RECORD_FAR", "RECORD_MALL", "RECORD_MELLOHI",
"RECORD_STAL", "RECORD_STRAD", "RECORD_WAIT", "RECORD_WARD");
public EditorSoundMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner, MenuObjectCallback callback) {
@@ -141,10 +87,10 @@ public class EditorSoundMenu extends AbstractStaticMenu {
this.pitchItem = ItemUtil.createItem(Material.LEVER, 1, Message.EDITOR_SOUND_MENU_SET_PITCH.getValue());
this.volumeItem = ItemUtil.createItem(Material.LEVER, 1, Message.EDITOR_SOUND_MENU_SET_VOLUME.getValue());
EditorLore.updateDoubleDescription(
volumeItem, targetHat.getSoundVolume(), Message.EDITOR_SOUND_MENU_PITCH_DESCRIPTION);
EditorLore.updateDoubleDescription(
pitchItem, targetHat.getSoundPitch(), Message.EDITOR_SOUND_MENU_PITCH_DESCRIPTION);
EditorLore.updateDoubleDescription(volumeItem, targetHat.getSoundVolume(),
Message.EDITOR_SOUND_MENU_PITCH_DESCRIPTION);
EditorLore.updateDoubleDescription(pitchItem, targetHat.getSoundPitch(),
Message.EDITOR_SOUND_MENU_PITCH_DESCRIPTION);
boolean useBlacklist = SettingsManager.EDITOR_SHOW_BLACKLISTED_SOUNDS.getBoolean();
for (Sound sound : Sound.values()) {
@@ -152,10 +98,12 @@ public class EditorSoundMenu extends AbstractStaticMenu {
if (!useBlacklist && blacklist.contains(sound.toString())) {
continue;
}
String category = sound.toString().split("_")[0];
switch (category) {
case "BLOCK":
blockSounds.add(sound);
@@ -166,7 +114,9 @@ public class EditorSoundMenu extends AbstractStaticMenu {
break;
default:
miscSounds.add(sound);
}
}
this.miscPages = MathUtil.calculatePageCount(miscSounds.size(), 45);
@@ -174,12 +124,14 @@ public class EditorSoundMenu extends AbstractStaticMenu {
this.entityPages = MathUtil.calculatePageCount(entitySounds.size(), 45);
build();
}
@Override
public void open() {
openMenu(miscMenus, currentMiscPage);
}
public void openMenu(Map<Integer, Inventory> menus, int currentPage) {
@@ -193,7 +145,9 @@ public class EditorSoundMenu extends AbstractStaticMenu {
menuManager.isOpeningMenu(this);
owner.openInventory(menu);
}
}
@Override
@@ -216,33 +170,40 @@ public class EditorSoundMenu extends AbstractStaticMenu {
// Misc filter.
setAction(45, (event, slot) -> {
currentFilter = SoundFilter.MISC;
openMenu(miscMenus, currentMiscPage);
return MenuClickResult.NEUTRAL;
});
// Block filter.
setAction(46, (event, slot) -> {
currentFilter = SoundFilter.BLOCKS;
openMenu(blockMenus, currentBlockPage);
return MenuClickResult.NEUTRAL;
});
// Entity filter.
setAction(47, (event, slot) -> {
currentFilter = SoundFilter.ENTITIES;
openMenu(entityMenus, currentEntityPage);
return MenuClickResult.NEUTRAL;
});
// Previous page.
setAction(48, (event, slot) -> {
final Map<Integer, Inventory> menus = getCurrentFilter();
int currentPage = getCurrentFilterPage();
@@ -253,10 +214,12 @@ public class EditorSoundMenu extends AbstractStaticMenu {
openMenu(menus, currentPage);
return MenuClickResult.NEUTRAL;
});
// Next page.
setAction(50, (event, slot) -> {
final Map<Integer, Inventory> menus = getCurrentFilter();
int currentPage = getCurrentFilterPage();
@@ -267,10 +230,12 @@ public class EditorSoundMenu extends AbstractStaticMenu {
openMenu(menus, currentPage);
return MenuClickResult.NEUTRAL;
});
// Volume.
setAction(52, (event, slot) -> {
final double increment = (event.isLeftClick() ? 0.1 : -0.1) * (event.isShiftClick() ? 10 : 1);
double volume = MathUtil.round(MathUtil.clamp(targetHat.getSoundVolume() + increment, 0, 2), 2);
@@ -281,10 +246,12 @@ public class EditorSoundMenu extends AbstractStaticMenu {
getOpenMenu().setItem(52, volumeItem);
return MenuClickResult.NEUTRAL;
});
// Pitch.
setAction(53, (event, slot) -> {
final double increment = (event.isLeftClick() ? 0.1 : -0.1) * (event.isShiftClick() ? 10 : 1);
double pitch = MathUtil.round(MathUtil.clamp(targetHat.getSoundPitch() + increment, 0, 2), 2);
@@ -295,9 +262,11 @@ public class EditorSoundMenu extends AbstractStaticMenu {
getOpenMenu().setItem(53, pitchItem);
return MenuClickResult.NEUTRAL;
});
MenuAction setSoundAction = (event, slot) -> {
final List<Sound> sounds = getCurrentFilterSounds();
final int currentPage = getCurrentFilterPage();
@@ -315,52 +284,61 @@ public class EditorSoundMenu extends AbstractStaticMenu {
currentPlayingSound = sound;
owner.playSound(owner.getLocation(), sound, (float) targetHat.getSoundVolume(), (float)
targetHat.getSoundPitch());
owner.playSound(owner.getLocation(), sound, (float) targetHat.getSoundVolume(),
(float) targetHat.getSoundPitch());
return MenuClickResult.NONE;
}
}
return MenuClickResult.NEUTRAL;
};
for (int i = 0; i < 45; i++) {
setAction(i, setSoundAction);
}
}
@Override
public void onClose(boolean forced) {
stopSound();
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
@Override
public boolean hasInventory(Inventory inventory) {
switch (currentFilter) {
default:
return miscMenus.containsValue(inventory);
case BLOCKS:
return blockMenus.containsValue(inventory);
case ENTITIES:
return entityMenus.containsValue(inventory);
}
}
private void generateSoundMenu(Map<Integer, Inventory> menus, int pages, Message startingTitle, int categoryIndex) {
for (int i = 0; i < pages; i++) {
String menuTitle = startingTitle
.getValue()
.replace("{1}", Integer.toString(i + 1))
.replace("{2}", Integer.toString(pages));
String menuTitle = startingTitle.getValue().replace("{1}", Integer.toString(i + 1)).replace("{2}",
Integer.toString(pages));
Inventory menu = Bukkit.createInventory(null, 54, Utils.legacySerializerAnyCase(menuTitle));
// Filters.
@@ -372,6 +350,7 @@ public class EditorSoundMenu extends AbstractStaticMenu {
menu.setItem(49, backButtonItem);
switch (categoryIndex) {
case 0:
ItemUtil.setItemType(menu.getItem(45), CompatibleMaterial.MUSHROOM_STEW);
break;
@@ -381,40 +360,34 @@ public class EditorSoundMenu extends AbstractStaticMenu {
case 2:
ItemUtil.setItemType(menu.getItem(47), CompatibleMaterial.MUSHROOM_STEW);
break;
}
// Next page.
if ((i + 1) < pages) {
menu.setItem(
50,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
menu.setItem(50, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
}
// Previous page.
if ((i + 1) > 1) {
menu.setItem(
48,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
menu.setItem(48, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
}
menus.put(i, menu);
}
}
private void populateSoundMenu(
List<Sound> sounds,
Map<Integer, Inventory> menus,
CompatibleMaterial disc,
int blockSoundSize,
int entitySoundSize) {
private void populateSoundMenu(List<Sound> sounds, Map<Integer, Inventory> menus, CompatibleMaterial disc,
int blockSoundSize, int entitySoundSize)
{
int index = 0;
int page = 0;
@@ -432,6 +405,7 @@ public class EditorSoundMenu extends AbstractStaticMenu {
if (targetHatSound != null && targetHatSound.equals(s)) {
ItemUtil.highlightItem(item);
}
Inventory menu = menus.get(page);
@@ -440,11 +414,13 @@ public class EditorSoundMenu extends AbstractStaticMenu {
if (blockSoundSize == 0) {
menu.setItem(46, null);
}
if (entitySoundSize == 0) {
menu.setItem(47, null);
}
index++;
@@ -453,61 +429,77 @@ public class EditorSoundMenu extends AbstractStaticMenu {
index = 0;
page++;
}
}
}
private Inventory getOpenMenu() {
switch (currentFilter) {
default:
return miscMenus.get(currentMiscPage);
case BLOCKS:
return blockMenus.get(currentBlockPage);
case ENTITIES:
return entityMenus.get(currentEntityPage);
}
}
private Map<Integer, Inventory> getCurrentFilter() {
switch (currentFilter) {
default:
return miscMenus;
case BLOCKS:
return blockMenus;
case ENTITIES:
return entityMenus;
}
}
private int getCurrentFilterPage() {
switch (currentFilter) {
default:
return currentMiscPage;
case BLOCKS:
return currentBlockPage;
case ENTITIES:
return currentEntityPage;
}
}
private List<Sound> getCurrentFilterSounds() {
switch (currentFilter) {
default:
return miscSounds;
case BLOCKS:
return blockSounds;
case ENTITIES:
return entitySounds;
}
}
private void setCurrentFilterPage(int page) {
switch (currentFilter) {
case MISC:
currentMiscPage = page;
@@ -520,7 +512,9 @@ public class EditorSoundMenu extends AbstractStaticMenu {
currentEntityPage = page;
break;
}
}
private void stopSound() {
@@ -532,13 +526,15 @@ public class EditorSoundMenu extends AbstractStaticMenu {
owner.stopSound(currentPlayingSound);
} catch (NoSuchMethodError error) {
}
}
}
private enum SoundFilter {
MISC,
BLOCKS,
ENTITIES;
MISC, BLOCKS, ENTITIES;
}
}
@@ -32,25 +32,33 @@ public class EditorTagMenu extends AbstractListMenu {
this.totalPages = MathUtil.calculatePageCount(ParticleTag.values().length, 28);
this.selectAction = (event, slot) -> {
int index = getClampedIndex(slot, 10, 2);
if (storedTags.containsKey(index)) {
callback.onSelect(storedTags.get(index));
return MenuClickResult.NEUTRAL;
}
return MenuClickResult.NONE;
};
build();
}
@Override
public void insertEmptyItem() {}
public void insertEmptyItem() {
}
@Override
public void removeEmptyItem() {}
public void removeEmptyItem() {
}
@Override
protected void build() {
@@ -65,26 +73,21 @@ public class EditorTagMenu extends AbstractListMenu {
// Next page.
if ((i + 1) < totalPages) {
menu.setItem(
50,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
menu.setItem(50, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
}
// Previous page.
if ((i + 1) > 1) {
menu.setItem(
48,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
menu.setItem(48, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
}
setMenu(i, menu);
}
setAction(49, backButtonAction);
@@ -97,12 +100,11 @@ public class EditorTagMenu extends AbstractListMenu {
if (tag == ParticleTag.NONE || tag == ParticleTag.CUSTOM) {
continue;
}
ItemStack tagItem = ItemUtil.createItem(
CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
tagTitle.replace("{1}", tag.getDisplayName()),
StringUtil.parseDescription(tag.getDescription()));
ItemStack tagItem = ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
tagTitle.replace("{1}", tag.getDisplayName()), StringUtil.parseDescription(tag.getDescription()));
setItem(page, getNormalIndex(index, 10, 2), tagItem);
storedTags.put(index++, tag);
@@ -112,18 +114,27 @@ public class EditorTagMenu extends AbstractListMenu {
index = 0;
page++;
}
}
for (int i = 0; i < 28; i++) {
setAction(getNormalIndex(i, 10, 2), selectAction);
}
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -23,8 +23,8 @@ public class EditorTagMenuOverview extends AbstractListMenu {
private final EditorMenuManager editorManager;
private final Hat targetHat;
private final String tagTitle = Message.EDITOR_TAG_OVERVIEW_MENU_TAG_TITLE.getValue();
private final ItemStack emptyItem = ItemUtil.createItem(
CompatibleMaterial.BARRIER.getMaterial(), 1, Message.EDITOR_TAG_OVERVIEW_MENU_EMPTY.getValue());
private final ItemStack emptyItem = ItemUtil.createItem(CompatibleMaterial.BARRIER.getMaterial(), 1,
Message.EDITOR_TAG_OVERVIEW_MENU_EMPTY.getValue());
private boolean isModified = false;
@@ -36,24 +36,25 @@ public class EditorTagMenuOverview extends AbstractListMenu {
this.targetHat = menuManager.getBaseHat();
this.totalPages = 1;
setMenu(
0,
Bukkit.createInventory(
null, 54, Utils.legacySerializerAnyCase(Message.EDITOR_TAG_OVERVIEW_MENU_TITLE.getValue())));
setMenu(0, Bukkit.createInventory(null, 54,
Utils.legacySerializerAnyCase(Message.EDITOR_TAG_OVERVIEW_MENU_TITLE.getValue())));
build();
}
@Override
public void insertEmptyItem() {
setItem(0, 22, emptyItem);
}
@Override
public void removeEmptyItem() {
setItem(0, 22, null);
}
@Override
@@ -61,29 +62,25 @@ public class EditorTagMenuOverview extends AbstractListMenu {
setButton(0, 46, backButtonItem, backButtonAction);
List<TextComponent> overviewTitleTextComponents =
StringUtil.parseDescription(Message.EDITOR_TAG_OVERVIEW_MENU_INFO.getValue()).stream()
.map(component ->
(TextComponent) component) // Convert list of Components to list of TextComponents.
.collect(Collectors.toList());
List<TextComponent> overviewTitleTextComponents = StringUtil
.parseDescription(Message.EDITOR_TAG_OVERVIEW_MENU_INFO.getValue()).stream()
.map(component -> (TextComponent) component) // Convert list of Components to list of TextComponents.
.collect(Collectors.toList());
setItem(
0,
49,
ItemUtil.createItem(
CompatibleMaterial.REDSTONE_TORCH.getMaterial(),
1,
Message.EDITOR_TAG_OVERVIEW_MENU_INFO_TITLE.getValue(),
overviewTitleTextComponents));
setItem(0, 49, ItemUtil.createItem(CompatibleMaterial.REDSTONE_TORCH.getMaterial(), 1,
Message.EDITOR_TAG_OVERVIEW_MENU_INFO_TITLE.getValue(), overviewTitleTextComponents));
// Add tag.
ItemStack addItem = ItemUtil.createItem(
CompatibleMaterial.TURTLE_HELMET.getMaterial(), 1, Message.EDITOR_TAG_OVERVIEW_MENU_ADD_TAG.getValue());
ItemStack addItem = ItemUtil.createItem(CompatibleMaterial.TURTLE_HELMET.getMaterial(), 1,
Message.EDITOR_TAG_OVERVIEW_MENU_ADD_TAG.getValue());
setButton(0, 52, addItem, (event, slot) -> {
EditorTagMenu editorTagMenu = new EditorTagMenu(core, editorManager, owner, (tagName) -> {
if (tagName == null) {
return;
}
ParticleTag tag = (ParticleTag) tagName;
@@ -93,36 +90,35 @@ public class EditorTagMenuOverview extends AbstractListMenu {
menuManager.closeCurrentMenu();
return;
}
int size = tags.size();
if (size < 28) {
List<TextComponent> overviewDescriptionTextComponents =
StringUtil.parseDescription(Message.EDITOR_TAG_OVERVIEW_MENU_TAG_DESCRIPTION.getValue())
.stream()
.map(component -> (TextComponent) component)
.collect(Collectors.toList());
List<TextComponent> overviewDescriptionTextComponents = StringUtil
.parseDescription(Message.EDITOR_TAG_OVERVIEW_MENU_TAG_DESCRIPTION.getValue()).stream()
.map(component -> (TextComponent) component).collect(Collectors.toList());
ItemStack tagItem = ItemUtil.createItem(
CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
1,
tagTitle.replace("{1}", tag.getDisplayName()),
overviewDescriptionTextComponents);
ItemStack tagItem = ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1,
tagTitle.replace("{1}", tag.getDisplayName()), overviewDescriptionTextComponents);
setItem(0, getNormalIndex(size, 10, 2), tagItem);
tags.add(tag);
}
if (isEmpty) {
setEmpty(false);
}
isModified = true;
menuManager.closeCurrentMenu();
});
menuManager.addMenu(editorTagMenu);
@@ -130,23 +126,28 @@ public class EditorTagMenuOverview extends AbstractListMenu {
editorTagMenu.open();
return MenuClickResult.NEUTRAL;
});
// Edit action.
final MenuAction editAction = (event, slot) -> {
if (event.isShiftRightClick()) {
deleteSlot(0, slot);
return MenuClickResult.NEGATIVE;
}
return MenuClickResult.NONE;
};
for (int i = 0; i < 28; i++) {
setAction(getNormalIndex(i, 10, 2), editAction);
}
// Tags.
@@ -157,23 +158,24 @@ public class EditorTagMenuOverview extends AbstractListMenu {
setEmpty(true);
return;
}
for (int i = 0; i < tags.size(); i++) {
ParticleTag tag = tags.get(i);
String titleString = Utils.legacySerializerAnyCase(tagTitle.replace("{1}", tag.getDisplayName()))
.content();
List<TextComponent> textComponents =
StringUtil.parseDescription(Message.EDITOR_TAG_OVERVIEW_MENU_TAG_DESCRIPTION.getValue()).stream()
.map(component -> (TextComponent) component)
.collect(Collectors.toList());
String titleString = Utils.legacySerializerAnyCase(tagTitle.replace("{1}", tag.getDisplayName())).content();
List<TextComponent> textComponents = StringUtil
.parseDescription(Message.EDITOR_TAG_OVERVIEW_MENU_TAG_DESCRIPTION.getValue()).stream()
.map(component -> (TextComponent) component).collect(Collectors.toList());
ItemStack tagItem =
ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1, titleString, textComponents);
ItemStack tagItem = ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1, titleString,
textComponents);
setItem(0, getNormalIndex(i, 10, 2), tagItem);
}
}
@Override
@@ -182,11 +184,15 @@ public class EditorTagMenuOverview extends AbstractListMenu {
if (isModified) {
core.getDatabase().saveMetaData(editorManager.getMenuName(), targetHat, DataType.TAGS, -1);
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
@Override
public void deleteSlot(int page, int slot) {
@@ -201,8 +207,11 @@ public class EditorTagMenuOverview extends AbstractListMenu {
if (tags.isEmpty()) {
setEmpty(true);
}
isModified = true;
}
}
@@ -22,16 +22,13 @@ public class EditorTransferMenu extends AbstractStaticMenu {
private final EditorMenuManager editorManager;
private final MenuInventory menuInventory;
List<TextComponent> textComponents =
StringUtil.parseDescription(Message.EDITOR_MOVE_MENU_MOVE_DESCRIPTION.getValue()).stream()
.map(component ->
(TextComponent) component) // Convert list of Components to list of TextComponents.
.collect(Collectors.toList());
List<TextComponent> textComponents = StringUtil
.parseDescription(Message.EDITOR_MOVE_MENU_MOVE_DESCRIPTION.getValue()).stream()
.map(component -> (TextComponent) component) // Convert list of Components to list of TextComponents.
.collect(Collectors.toList());
private final ItemStack emptyItem = ItemUtil.createItem(
CompatibleMaterial.LIGHT_GRAY_STAINED_GLASS_PANE.getMaterial(),
1,
Message.EDITOR_MOVE_MENU_MOVE.getValue(),
CompatibleMaterial.LIGHT_GRAY_STAINED_GLASS_PANE.getMaterial(), 1, Message.EDITOR_MOVE_MENU_MOVE.getValue(),
textComponents);
private final String menuName;
@@ -43,45 +40,40 @@ public class EditorTransferMenu extends AbstractStaticMenu {
this.editorManager = menuManager;
this.menuName = menuName;
this.menuInventory = core.getDatabase().loadInventory(menuName, core.getPlayerState(owner));
this.inventory = Bukkit.createInventory(
null,
menuInventory.getSize(),
Utils.legacySerializerAnyCase(EditorLore.getTrimmedMenuTitle(
menuInventory.getTitle().content(), Message.EDITOR_MOVE_MENU_TITLE)));
this.inventory = Bukkit.createInventory(null, menuInventory.getSize(), Utils.legacySerializerAnyCase(
EditorLore.getTrimmedMenuTitle(menuInventory.getTitle().content(), Message.EDITOR_MOVE_MENU_TITLE)));
build();
}
@Override
protected void build() {
final MenuAction moveAction = (event, slot) -> {
if (event.isRightClick()) {
menuManager.closeCurrentMenu();
return MenuClickResult.NEUTRAL;
}
int currentSlot = editorManager.getBaseHat().getSlot();
core.getDatabase()
.moveHat(
null,
editorManager.getBaseHat(),
editorManager.getMenuName(),
menuName,
currentSlot,
slot,
false);
core.getDatabase().moveHat(null, editorManager.getBaseHat(), editorManager.getMenuName(), menuName,
currentSlot, slot, false);
editorManager.getEditingMenu().removeButton(currentSlot);
editorManager.returnToBaseMenu();
return MenuClickResult.NEUTRAL;
};
final MenuAction cancelAction = (event, slot) -> {
if (event.isRightClick()) {
menuManager.closeCurrentMenu();
@@ -93,7 +85,9 @@ public class EditorTransferMenu extends AbstractStaticMenu {
CompatibleSound.ENTITY_VILLAGER_NO.play(owner, 1.0f, 1.0f);
return MenuClickResult.NONE;
}
};
for (int i = 0; i < menuInventory.getSize(); i++) {
@@ -105,19 +99,26 @@ public class EditorTransferMenu extends AbstractStaticMenu {
} else {
ItemUtil.setNameAndDescription(
item,
ItemUtil.setNameAndDescription(item,
Utils.legacySerializerAnyCase(Message.EDITOR_MOVE_MENU_OCCUPIED.getValue()),
StringUtil.parseDescription(Message.EDITOR_MOVE_MENU_OCCUPIED_DESCRIPTION.getValue()));
setButton(i, item, cancelAction);
}
}
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -75,6 +75,7 @@ public class EditorTypeMenu extends AbstractStaticMenu {
customTypeCurrentPage = 0;
setTypeAction = (event, slot) -> {
int index = getClampedIndex(slot, 10, 2);
if (selectingFromIncludedTypes) {
@@ -84,6 +85,7 @@ public class EditorTypeMenu extends AbstractStaticMenu {
targetHat.setType(includedTypeData.get(typeIndex));
menuManager.closeCurrentMenu();
}
} else {
@@ -98,19 +100,24 @@ public class EditorTypeMenu extends AbstractStaticMenu {
targetHat.setCustomType(new PixelEffect(image, name));
menuManager.closeCurrentMenu();
}
}
return MenuClickResult.NEUTRAL;
};
build();
}
@Override
public void open() {
open(includedTypeMenus.get(includedTypeCurrentPage));
}
private void open(Inventory inventory) {
@@ -118,6 +125,7 @@ public class EditorTypeMenu extends AbstractStaticMenu {
menuManager.isOpeningMenu(this);
owner.openInventory(inventory);
}
@Override
@@ -128,10 +136,12 @@ public class EditorTypeMenu extends AbstractStaticMenu {
for (int i = 0; i < 28; i++) {
setAction(getNormalIndex(i, 10, 2), setTypeAction);
}
// Previous page.
setAction(48, (event, slot) -> {
if (selectingFromIncludedTypes) {
includedTypeCurrentPage--;
@@ -143,13 +153,16 @@ public class EditorTypeMenu extends AbstractStaticMenu {
customTypeCurrentPage--;
open(customTypeMenus.get(customTypeCurrentPage));
}
return MenuClickResult.NEUTRAL;
});
// Next page.
setAction(50, (event, slot) -> {
if (selectingFromIncludedTypes) {
includedTypeCurrentPage++;
@@ -161,27 +174,33 @@ public class EditorTypeMenu extends AbstractStaticMenu {
customTypeCurrentPage++;
open(customTypeMenus.get(customTypeCurrentPage));
}
return MenuClickResult.NEUTRAL;
});
// Included types filter.
setAction(46, (event, slot) -> {
selectingFromIncludedTypes = true;
open(includedTypeMenus.get(includedTypeCurrentPage));
return MenuClickResult.NEUTRAL;
});
// Custom types filter.
setAction(47, (event, slot) -> {
selectingFromIncludedTypes = false;
open(customTypeMenus.get(customTypeCurrentPage));
return MenuClickResult.NEUTRAL;
});
// Create included type menus.
@@ -189,6 +208,7 @@ public class EditorTypeMenu extends AbstractStaticMenu {
// Create custom type menus.
generateCustomTypeMenus();
}
@Override
@@ -197,11 +217,15 @@ public class EditorTypeMenu extends AbstractStaticMenu {
if (!forced) {
callback.onSelect(null);
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
@Override
public boolean hasInventory(Inventory inventory) {
@@ -209,9 +233,11 @@ public class EditorTypeMenu extends AbstractStaticMenu {
if (selectingFromIncludedTypes) {
return includedTypeMenus.get(includedTypeCurrentPage).equals(inventory);
}
return customTypeMenus.get(customTypeCurrentPage).equals(inventory);
}
private void generateIncludedTypeMenus() {
@@ -228,6 +254,7 @@ public class EditorTypeMenu extends AbstractStaticMenu {
if (type.isCustom()) {
continue;
}
if (type.isDebug()) {
@@ -235,7 +262,9 @@ public class EditorTypeMenu extends AbstractStaticMenu {
if (!CosmeticsOG.debugging) {
continue;
}
}
boolean selected = currentType.equals(type);
@@ -249,6 +278,7 @@ public class EditorTypeMenu extends AbstractStaticMenu {
ItemUtil.setItemType(item, CompatibleMaterial.CYAN_DYE);
ItemUtil.highlightItem(item);
}
includedTypeMenus.get(page).setItem(getNormalIndex(index++, 10, 2), item);
@@ -259,8 +289,11 @@ public class EditorTypeMenu extends AbstractStaticMenu {
index = 0;
page++;
}
}
}
private void generateCustomTypeMenus() {
@@ -273,14 +306,8 @@ public class EditorTypeMenu extends AbstractStaticMenu {
if (customTypes.size() == 0) {
customTypeMenus
.get(0)
.setItem(
22,
ItemUtil.createItem(
CompatibleMaterial.BARRIER.getMaterial(),
1,
Message.EDITOR_TYPE_MENU_NO_CUSTOM_TYPES.getValue()));
customTypeMenus.get(0).setItem(22, ItemUtil.createItem(CompatibleMaterial.BARRIER.getMaterial(), 1,
Message.EDITOR_TYPE_MENU_NO_CUSTOM_TYPES.getValue()));
} else {
@@ -291,7 +318,9 @@ public class EditorTypeMenu extends AbstractStaticMenu {
if (customEffect != null) {
currentEffectName = customEffect.getImageName();
}
}
int page = 0;
@@ -314,6 +343,7 @@ public class EditorTypeMenu extends AbstractStaticMenu {
if (isSelected) {
ItemUtil.highlightItem(item);
}
customTypeMenus.get(page).setItem(getNormalIndex(index++, 10, 2), item);
@@ -328,9 +358,13 @@ public class EditorTypeMenu extends AbstractStaticMenu {
index = 0;
page++;
}
}
}
}
private void generateMenus(Map<Integer, Inventory> menus, int pages, int category) {
@@ -345,49 +379,39 @@ public class EditorTypeMenu extends AbstractStaticMenu {
// Next page.
if ((i + 1) < pages) {
menu.setItem(
50,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
menu.setItem(50, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_NEXT_PAGE.getValue()));
}
// Previous page.
if ((i + 1) > 1) {
menu.setItem(
48,
ItemUtil.createItem(
CompatibleMaterial.LIME_DYE.getMaterial(),
1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
menu.setItem(48, ItemUtil.createItem(CompatibleMaterial.LIME_DYE.getMaterial(), 1,
Message.EDITOR_MISC_PREVIOUS_PAGE.getValue()));
}
if (category == 0) {
menu.setItem(
46,
ItemUtil.createItem(
CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
1,
Message.EDITOR_TYPE_MENU_INCLUDED_FILTER.getValue()));
menu.setItem(
47, ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_TYPE_MENU_CUSTOM_FILTER.getValue()));
menu.setItem(46, ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1,
Message.EDITOR_TYPE_MENU_INCLUDED_FILTER.getValue()));
menu.setItem(47,
ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_TYPE_MENU_CUSTOM_FILTER.getValue()));
} else {
menu.setItem(
46, ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_TYPE_MENU_INCLUDED_FILTER.getValue()));
menu.setItem(
47,
ItemUtil.createItem(
CompatibleMaterial.MUSHROOM_STEW.getMaterial(),
1,
Message.EDITOR_TYPE_MENU_CUSTOM_FILTER.getValue()));
menu.setItem(46,
ItemUtil.createItem(Material.BOWL, 1, Message.EDITOR_TYPE_MENU_INCLUDED_FILTER.getValue()));
menu.setItem(47, ItemUtil.createItem(CompatibleMaterial.MUSHROOM_STEW.getMaterial(), 1,
Message.EDITOR_TYPE_MENU_CUSTOM_FILTER.getValue()));
}
menus.put(i, menu);
}
}
}
@@ -22,18 +22,20 @@ public class EditorVelocityMenu extends AbstractStaticMenu {
private final int particleIndex;
private final MenuCallback callback;
public EditorVelocityMenu(
CosmeticsOG core, EditorMenuManager menuManager, Player owner, int particleIndex, MenuCallback callback) {
public EditorVelocityMenu(CosmeticsOG core, EditorMenuManager menuManager, Player owner, int particleIndex,
MenuCallback callback)
{
super(core, menuManager, owner);
this.editorManager = menuManager;
this.particleIndex = particleIndex;
this.callback = callback;
this.inventory = Bukkit.createInventory(
null, 27, Utils.legacySerializerAnyCase(Message.EDITOR_VELOCITY_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 27,
Utils.legacySerializerAnyCase(Message.EDITOR_VELOCITY_MENU_TITLE.getValue()));
build();
}
@Override
@@ -44,31 +46,38 @@ public class EditorVelocityMenu extends AbstractStaticMenu {
Vector velocity = itemStackData.getVelocity();
// X Offset.
ItemStack xItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_VELOCITY_MENU_SET_VELOCITY_X.getValue());
ItemStack xItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_VELOCITY_MENU_SET_VELOCITY_X.getValue());
EditorLore.updateVectorDescription(xItem, velocity, Message.EDITOR_OFFSET_MENU_OFFSET_X_DESCRIPTION);
setButton(14, xItem, (event, slot) -> {
return updateVelocity(event, targetHat, VectorAxis.X);
});
// Y Offset.
ItemStack yItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_VELOCITY_MENU_SET_VELOCITY_Y.getValue());
ItemStack yItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_VELOCITY_MENU_SET_VELOCITY_Y.getValue());
EditorLore.updateVectorDescription(yItem, velocity, Message.EDITOR_OFFSET_MENU_OFFSET_Y_DESCRIPTION);
setButton(15, yItem, (event, slot) -> {
return updateVelocity(event, targetHat, VectorAxis.Y);
});
// Z Offset.
ItemStack zItem = ItemUtil.createItem(
CompatibleMaterial.REPEATER.getMaterial(), 1, Message.EDITOR_VELOCITY_MENU_SET_VELOCITY_Z.getValue());
ItemStack zItem = ItemUtil.createItem(CompatibleMaterial.REPEATER.getMaterial(), 1,
Message.EDITOR_VELOCITY_MENU_SET_VELOCITY_Z.getValue());
EditorLore.updateVectorDescription(zItem, velocity, Message.EDITOR_OFFSET_MENU_OFFSET_Z_DESCRIPTION);
setButton(16, zItem, (event, slot) -> {
return updateVelocity(event, targetHat, VectorAxis.Z);
});
// Back.
setButton(10, backButtonItem, backButtonAction);
}
@Override
@@ -77,11 +86,15 @@ public class EditorVelocityMenu extends AbstractStaticMenu {
if (!forced) {
callback.onCallback();
}
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
public MenuClickResult updateVelocity(MenuClickEvent event, Hat hat, VectorAxis axis) {
@@ -94,6 +107,7 @@ public class EditorVelocityMenu extends AbstractStaticMenu {
Vector velocity = data.getVelocity();
switch (axis) {
case X:
double vx = !isMiddleClick ? velocity.getX() + modifier : 0;
@@ -112,6 +126,7 @@ public class EditorVelocityMenu extends AbstractStaticMenu {
data.setVelocityZ(vz);
break;
}
EditorLore.updateVectorDescription(getItem(14), velocity, Message.EDITOR_OFFSET_MENU_OFFSET_X_DESCRIPTION);
@@ -125,6 +140,9 @@ public class EditorVelocityMenu extends AbstractStaticMenu {
} else {
return event.isLeftClick() ? MenuClickResult.POSITIVE : MenuClickResult.NEGATIVE;
}
}
}
@@ -9,20 +9,27 @@ import org.bukkit.entity.Player;
public class PurchaseMenuManager extends EditorMenuManager {
public PurchaseMenuManager(CosmeticsOG core, Player owner) {
super(core, owner);
}
@Override
public void openMainMenu() {
PurchaseEditorMainMenu purchaseEditorMainMenu = new PurchaseEditorMainMenu(core, this, owner);
addMenu(purchaseEditorMainMenu);
purchaseEditorMainMenu.open();
}
@Override
public void openSettingsMenu() {
PurchaseEditorSettingsMenu purchaseEditorSettingsMenu = new PurchaseEditorSettingsMenu(core, this, owner);
addMenu(purchaseEditorSettingsMenu);
purchaseEditorSettingsMenu.open();
}
}
@@ -39,10 +39,11 @@ public class PurchaseEditorMainMenu extends AbstractStaticMenu {
this.purchaseManager = menuManager;
this.editorBaseMenu = menuManager.getEditingMenu();
this.targetHat = menuManager.getBaseHat();
this.inventory = Bukkit.createInventory(
null, 36, Utils.legacySerializerAnyCase(Message.EDITOR_MAIN_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 36,
Utils.legacySerializerAnyCase(Message.EDITOR_MAIN_MENU_TITLE.getValue()));
build();
}
@Override
@@ -50,39 +51,43 @@ public class PurchaseEditorMainMenu extends AbstractStaticMenu {
setButton(31, backButtonItem, backButtonAction);
ItemStack actionItem = ItemUtil.createItem(
CompatibleMaterial.GUNPOWDER.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_ACTION.getValue());
EditorLore.updateSpecificActionDescription(
actionItem, targetHat, targetHat.getLeftClickAction(), targetHat.getLeftClickArgument());
ItemStack actionItem = ItemUtil.createItem(CompatibleMaterial.GUNPOWDER.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_ACTION.getValue());
EditorLore.updateSpecificActionDescription(actionItem, targetHat, targetHat.getLeftClickAction(),
targetHat.getLeftClickArgument());
setButton(11, actionItem, (event, slot) -> {
EditorActionMenu editorActionMenu =
new EditorActionMenu(core, purchaseManager, owner, true, true, (action) -> {
EditorActionMenu editorActionMenu = new EditorActionMenu(core, purchaseManager, owner, true, true,
(action) ->
{
if (action == null) {
return;
}
ParticleAction pa = (ParticleAction) action;
targetHat.setLeftClickAction(pa);
EditorLore.updateSpecificActionDescription(
getItem(11),
targetHat,
targetHat.getLeftClickAction(),
targetHat.getLeftClickArgument());
EditorLore.updateSpecificActionDescription(getItem(11), targetHat,
targetHat.getLeftClickAction(), targetHat.getLeftClickArgument());
menuManager.closeCurrentMenu();
});
menuManager.addMenu(editorActionMenu);
editorActionMenu.open();
return MenuClickResult.NEUTRAL;
});
ItemStack nameItem = ItemUtil.createItem(
CompatibleMaterial.PLAYER_HEAD.getMaterial(), 1, Message.EDITOR_META_MENU_SET_NAME.getValue());
ItemStack nameItem = ItemUtil.createItem(CompatibleMaterial.PLAYER_HEAD.getMaterial(), 1,
Message.EDITOR_META_MENU_SET_NAME.getValue());
setButton(13, nameItem, (event, slot) -> {
if (event.isLeftClick()) {
purchaseManager.getOwnerState().setMetaState(MetaState.HAT_NAME);
@@ -93,18 +98,21 @@ public class PurchaseEditorMainMenu extends AbstractStaticMenu {
targetHat.setName(Message.EDITOR_MISC_NEW_PARTICLE.getValue());
EditorLore.updateNameDescription(getItem(13), targetHat);
}
return MenuClickResult.NEUTRAL;
});
ItemStack descriptionItem = ItemUtil.createItem(
CompatibleMaterial.WRITABLE_BOOK.getMaterial(), 1, Message.EDITOR_META_MENU_SET_DESCRIPTION.getValue());
ItemStack descriptionItem = ItemUtil.createItem(CompatibleMaterial.WRITABLE_BOOK.getMaterial(), 1,
Message.EDITOR_META_MENU_SET_DESCRIPTION.getValue());
setButton(15, descriptionItem, (event, slot) -> {
if (event.isLeftClick()) {
EditorDescriptionMenu editorDescriptionMenu =
new EditorDescriptionMenu(core, purchaseManager, owner, true);
EditorDescriptionMenu editorDescriptionMenu = new EditorDescriptionMenu(core, purchaseManager, owner,
true);
menuManager.addMenu(editorDescriptionMenu);
editorDescriptionMenu.open();
@@ -119,30 +127,33 @@ public class PurchaseEditorMainMenu extends AbstractStaticMenu {
database.saveMetaData(menuName, targetHat, DataType.DESCRIPTION, 0);
EditorLore.updateDescriptionDescription(getItem(15), targetHat.getDescription());
}
}
return MenuClickResult.NEUTRAL;
});
ItemStack slotItem = ItemUtil.createItem(
Material.ITEM_FRAME,
Message.EDITOR_MAIN_MENU_SET_SLOT.getValue(),
ItemStack slotItem = ItemUtil.createItem(Material.ITEM_FRAME, Message.EDITOR_MAIN_MENU_SET_SLOT.getValue(),
StringUtil.parseDescription(Message.EDITOR_MAIN_MENU_SLOT_DESCRIPTION.getValue()));
setButton(19, slotItem, (event, slot) -> {
EditorSlotMenu editorSlotMenu = new EditorSlotMenu(core, purchaseManager, owner, editorBaseMenu, false);
menuManager.addMenu(editorSlotMenu);
editorSlotMenu.open();
return MenuClickResult.NEUTRAL;
});
ItemStack cloneItem = ItemUtil.createItem(
CompatibleMaterial.PRISMARINE_SHARD.getMaterial(),
ItemStack cloneItem = ItemUtil.createItem(CompatibleMaterial.PRISMARINE_SHARD.getMaterial(),
Message.EDITOR_MAIN_MENU_CLONE.getValue(),
StringUtil.parseDescription(Message.EDITOR_MAIN_MENU_CLONE_DESCRIPTION.getValue()));
setButton(21, cloneItem, (event, slot) -> {
if (targetHat.isModified()) {
int targetSlot = purchaseManager.getTargetSlot();
@@ -150,6 +161,7 @@ public class PurchaseEditorMainMenu extends AbstractStaticMenu {
core.getDatabase().saveHat(editorBaseMenu.getMenuInventory().getName(), targetSlot, targetHat);
targetHat.clearPropertyChanges();
}
EditorSlotMenu editorSlotMenu = new EditorSlotMenu(core, purchaseManager, owner, editorBaseMenu, true);
@@ -158,26 +170,31 @@ public class PurchaseEditorMainMenu extends AbstractStaticMenu {
editorSlotMenu.open();
return MenuClickResult.NEUTRAL;
});
ItemStack soundItem = ItemUtil.createItem(
CompatibleMaterial.MUSIC_DISC_STRAD.getMaterial(), 1, Message.EDITOR_MAIN_MENU_SET_SOUND.getValue());
ItemStack soundItem = ItemUtil.createItem(CompatibleMaterial.MUSIC_DISC_STRAD.getMaterial(), 1,
Message.EDITOR_MAIN_MENU_SET_SOUND.getValue());
EditorLore.updateSoundItemDescription(soundItem, targetHat);
setButton(23, soundItem, (event, slot) -> {
if (event.isLeftClick()) {
EditorSoundMenu editorSoundMenu = new EditorSoundMenu(core, purchaseManager, owner, (sound) -> {
menuManager.closeCurrentMenu();
if (sound == null) {
return;
}
Sound s = (Sound) sound;
targetHat.setSound(s);
EditorLore.updateSoundItemDescription(getItem(23), targetHat);
});
menuManager.addMenu(editorSoundMenu);
@@ -187,37 +204,48 @@ public class PurchaseEditorMainMenu extends AbstractStaticMenu {
targetHat.removeSound();
EditorLore.updateSoundItemDescription(getItem(23), targetHat);
}
return MenuClickResult.NEUTRAL;
});
ItemStack iconItem = targetHat.getItem();
ItemUtil.setNameAndDescription(
iconItem, Message.EDITOR_MAIN_MENU_SET_ICON, Message.EDITOR_MAIN_MENU_ICON_DESCRIPTION);
ItemUtil.setNameAndDescription(iconItem, Message.EDITOR_MAIN_MENU_SET_ICON,
Message.EDITOR_MAIN_MENU_ICON_DESCRIPTION);
setButton(25, iconItem, (event, slot) -> {
EditorIconMenuOverview editorIconMenuOverview =
new EditorIconMenuOverview(core, purchaseManager, owner, (mainItem) -> {
EditorIconMenuOverview editorIconMenuOverview = new EditorIconMenuOverview(core, purchaseManager, owner,
(mainItem) ->
{
if (mainItem == null) {
return;
}
ItemStack item = (ItemStack) mainItem;
// Update the button with the new item.
setButton(25, item, (menuEvent, menuSlot) -> MenuClickResult.NEUTRAL);
});
menuManager.addMenu(editorIconMenuOverview);
editorIconMenuOverview.open();
return MenuClickResult.NEUTRAL;
});
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void open() {
@@ -226,8 +254,12 @@ public class PurchaseEditorMainMenu extends AbstractStaticMenu {
EditorLore.updateDescriptionDescription(getItem(15), targetHat.getDescription());
super.open();
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -31,10 +31,11 @@ public class PurchaseEditorSettingsMenu extends AbstractStaticMenu {
this.purchaseManager = menuManager;
this.editorBaseMenu = menuManager.getEditingMenu();
this.menuInventory = editorBaseMenu.getMenuInventory();
this.inventory = Bukkit.createInventory(
null, 36, Utils.legacySerializerAnyCase(Message.EDITOR_SETTINGS_MENU_TITLE.getValue()));
this.inventory = Bukkit.createInventory(null, 36,
Utils.legacySerializerAnyCase(Message.EDITOR_SETTINGS_MENU_TITLE.getValue()));
build();
}
@Override
@@ -44,54 +45,64 @@ public class PurchaseEditorSettingsMenu extends AbstractStaticMenu {
setButton(31, backButtonItem, backButtonAction);
// Set Title.
ItemStack titleItem = ItemUtil.createItem(
CompatibleMaterial.SIGN.getMaterial(), 1, Message.EDITOR_SETTINGS_MENU_SET_TITLE.getValue());
ItemStack titleItem = ItemUtil.createItem(CompatibleMaterial.SIGN.getMaterial(), 1,
Message.EDITOR_SETTINGS_MENU_SET_TITLE.getValue());
setButton(10, titleItem, (event, slot) -> {
purchaseManager.getOwnerState().setMetaState(MetaState.MENU_TITLE);
core.prompt(owner, MetaState.MENU_TITLE);
menuManager.closeInventory();
return MenuClickResult.NEUTRAL;
});
// Set Size.
ItemStack sizeItem = ItemUtil.createItem(
CompatibleMaterial.COMPARATOR.getMaterial(), 1, Message.EDITOR_SETTINGS_MENU_SET_SIZE.getValue());
ItemStack sizeItem = ItemUtil.createItem(CompatibleMaterial.COMPARATOR.getMaterial(), 1,
Message.EDITOR_SETTINGS_MENU_SET_SIZE.getValue());
setButton(12, sizeItem, (event, slot) -> {
EditorResizeMenu editorResizeMenu = new EditorResizeMenu(core, purchaseManager, owner, editorBaseMenu);
menuManager.addMenu(editorResizeMenu);
editorResizeMenu.open();
return MenuClickResult.NEUTRAL;
});
// Toggle Live Updates.
ItemStack liveItem =
ItemUtil.createItem(Material.LEVER, 1, Message.EDITOR_SETTINGS_MENU_TOGGLE_LIVE_MENU.getValue());
EditorLore.updateBooleanDescription(
liveItem, editorBaseMenu.canUpdate(), Message.EDITOR_SETTINGS_MENU_ANIMATION_DESCRIPTION);
ItemStack liveItem = ItemUtil.createItem(Material.LEVER, 1,
Message.EDITOR_SETTINGS_MENU_TOGGLE_LIVE_MENU.getValue());
EditorLore.updateBooleanDescription(liveItem, editorBaseMenu.canUpdate(),
Message.EDITOR_SETTINGS_MENU_ANIMATION_DESCRIPTION);
setButton(14, liveItem, (event, slot) -> {
editorBaseMenu.toggleUpdates();
EditorLore.updateBooleanDescription(
getItem(14), editorBaseMenu.canUpdate(), Message.EDITOR_SETTINGS_MENU_ANIMATION_DESCRIPTION);
EditorLore.updateBooleanDescription(getItem(14), editorBaseMenu.canUpdate(),
Message.EDITOR_SETTINGS_MENU_ANIMATION_DESCRIPTION);
return MenuClickResult.NEUTRAL;
});
// Sync Icons.
ItemStack syncItem = ItemUtil.createItem(
CompatibleMaterial.CONDUIT.getMaterial(),
ItemStack syncItem = ItemUtil.createItem(CompatibleMaterial.CONDUIT.getMaterial(),
Message.EDITOR_SETTINGS_MENU_SYNC_ICONS.getValue(),
StringUtil.parseDescription(Message.EDITOR_SETTINGS_SYNC_DESCRIPTION.getValue()));
setButton(16, syncItem, (event, slot) -> {
editorBaseMenu.syncItems();
return MenuClickResult.NEUTRAL;
});
}
@Override
public void onClose(boolean forced) {}
public void onClose(boolean forced) {
}
@Override
public void open() {
@@ -103,11 +114,16 @@ public class PurchaseEditorSettingsMenu extends AbstractStaticMenu {
if (titleItem != null) {
ItemUtil.setItemDescription(titleItem, StringUtil.parseDescription(title));
}
super.open();
}
@Override
public void onTick(int ticks) {}
public void onTick(int ticks) {
}
}
@@ -16,30 +16,43 @@ public class HatEquipEvent extends Event implements Cancellable {
private boolean cancelled = false;
public HatEquipEvent(final Player player, final Hat hat) {
this.player = player;
this.hat = hat;
}
public Player getPlayer() {
return player;
}
public Hat getHat() {
return hat;
}
@Override
public HandlerList getHandlers() {
return handlers;
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancelled) {
this.cancelled = cancelled;
}
}
@@ -7,5 +7,7 @@ public class InvalidHatException extends Exception {
public InvalidHatException(String s) {
super(s);
}
}
@@ -7,5 +7,7 @@ public class InvalidLabelException extends Exception {
public InvalidLabelException(String s) {
super(s);
}
}
@@ -6,6 +6,7 @@ public interface CurrencyHook {
/**
* Gets the players current economy balance
*
* @param id
* @return
*/
@@ -13,6 +14,7 @@ public interface CurrencyHook {
/**
* Withdraws the provided amount from the players economy balance
*
* @param id
* @param amount
* @return
@@ -21,7 +23,9 @@ public interface CurrencyHook {
/**
* Checks to see if this hook has been loaded
*
* @return
*/
public boolean isEnabled();
}
@@ -6,6 +6,7 @@ public interface VanishHook {
/**
* Checks to see if this player is currently vanished
*
* @param player
* @return
*/
@@ -15,4 +16,5 @@ public interface VanishHook {
* Unregisters this hook
*/
public void unregister();
}
@@ -11,22 +11,31 @@ public class TokenManagerHook implements CurrencyHook {
private final TokenManager api;
public TokenManagerHook() {
api = (TokenManager) Bukkit.getServer().getPluginManager().getPlugin("TokenManager");
}
@Override
public int getBalance(Player player) {
OptionalLong balance = api.getTokens(player);
return (int) balance.orElse(0);
}
@Override
public boolean withdraw(Player player, int amount) {
return api.removeTokens(player, amount);
}
@Override
public boolean isEnabled() {
return api != null;
}
}
@@ -12,26 +12,38 @@ public class VaultHook implements CurrencyHook {
private boolean economyEnabled;
public VaultHook(final CosmeticsOG core) {
RegisteredServiceProvider<Economy> econProvider =
core.getServer().getServicesManager().getRegistration(net.milkbowl.vault.economy.Economy.class);
RegisteredServiceProvider<Economy> econProvider = core.getServer().getServicesManager()
.getRegistration(net.milkbowl.vault.economy.Economy.class);
if (econProvider != null) {
economy = econProvider.getProvider();
}
economyEnabled = economy != null;
}
@Override
public int getBalance(Player player) {
return (int) economy.getBalance(player);
}
@Override
public boolean withdraw(Player player, int amount) {
return economy.withdrawPlayer(player, amount).transactionSuccess();
}
@Override
public boolean isEnabled() {
return economyEnabled;
}
}
@@ -19,6 +19,7 @@ import org.bukkit.event.Listener;
/**
* Listens for a player editing meta properties through the menu editor
*
* @author MediusEcho
*
*/
@@ -31,6 +32,7 @@ public class ChatListener implements Listener {
this.core = core;
core.getServer().getPluginManager().registerEvents(this, core);
}
@EventHandler(priority = EventPriority.HIGHEST)
@@ -47,12 +49,14 @@ public class ChatListener implements Listener {
if (metaState.equals(MetaState.NONE)) {
return;
}
MenuManager menuManager = playerState.getMenuManager();
if (!(menuManager instanceof EditorMenuManager)) {
return;
}
EditorMenuManager editorManager = (EditorMenuManager) menuManager;
@@ -62,22 +66,26 @@ public class ChatListener implements Listener {
Bukkit.getScheduler().scheduleSyncDelayedTask(CosmeticsOG.instance, () -> {
// Convert the Component to a plain string
String messageString =
PlainTextComponentSerializer.plainText().serialize(event.message());
String messageString = PlainTextComponentSerializer.plainText().serialize(event.message());
if (Utils.stripColors(messageString).equals("cancel")) {
editorManager.reopen();
return;
}
List<String> arguments = Arrays.asList(messageString.split(" "));
metaState.onMetaSet(editorManager, player, arguments);
});
}
}
}
/**
@@ -86,5 +94,7 @@ public class ChatListener implements Listener {
public void unregister() {
AsyncChatEvent.getHandlerList().unregister(this);
}
}
@@ -19,14 +19,19 @@ public class CommandListener implements Listener {
private final CosmeticsOG core;
public CommandListener(final CosmeticsOG core) {
this.core = core;
core.getServer().getPluginManager().registerEvents(this, core);
}
@EventHandler
public void onCommand(PlayerCommandPreprocessEvent event) {
if (event.getMessage().contains(" ")) {
return;
}
Player player = event.getPlayer();
@@ -34,19 +39,25 @@ public class CommandListener implements Listener {
// Cancel any commands if this player is editing a meta property
if (SettingsManager.EDITOR_RESTRICT_COMMANDS.getBoolean() && playerState.hasEditorOpen()) {
MetaState metaState = playerState.getMetaState();
if (metaState != MetaState.NONE) {
player.sendMessage(Message.COMMAND_ERROR_ALREADY_EDITING.getValue());
event.setCancelled(true);
}
}
// Check for menu aliases
else {
String cmd = event.getMessage().replaceFirst("/", "");
MenuInventory inventory = core.getDatabase().getInventoryFromAlias(cmd, playerState);
if (inventory != null) {
event.setCancelled(true);
StaticMenuManager staticManager = core.getMenuManagerFactory().getStaticMenuManager(playerState);
@@ -54,7 +65,11 @@ public class CommandListener implements Listener {
staticManager.addMenu(menu);
menu.open();
}
}
}
}
@@ -23,63 +23,93 @@ public class ConnectionListener implements Listener {
private final CosmeticsOG core;
public ConnectionListener(final CosmeticsOG core) {
this.core = core;
core.getServer().getPluginManager().registerEvents(this, core);
}
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
UUID id = event.getPlayer().getUniqueId();
PlayerState playerState = core.getNewPlayerState(player);
// Load equipped hats
core.getDatabase().loadPlayerEquippedHats(id, (loadedHats) -> {
if (loadedHats instanceof List) {
@SuppressWarnings("unchecked")
List<Hat> hats = (ArrayList<Hat>) loadedHats;
for (Hat hat : hats) {
playerState.addHat(hat);
}
}
});
// Load purchased hats
core.getDatabase().loadPlayerPurchasedHats(id, (purchasedHats) -> {
if (purchasedHats instanceof List) {
@SuppressWarnings("unchecked")
List<HatReference> hats = (ArrayList<HatReference>) purchasedHats;
for (HatReference hat : hats) {
playerState.addPurchasedHat(hat);
}
}
});
// Load legacy purchased hats
if (SettingsManager.CHECK_AGAINST_LEGACY_PURCHASES.getBoolean()
&& core.getDatabaseType() == DatabaseType.YAML) {
&& core.getDatabaseType() == DatabaseType.YAML)
{
YamlDatabase database = (YamlDatabase) core.getDatabase();
database.loadPlayerLegacyPurchasedHats(id, (legacyHats) -> {
if (legacyHats instanceof List) {
@SuppressWarnings("unchecked")
List<String> hats = (ArrayList<String>) legacyHats;
for (String path : hats) {
playerState.addLegacyPurchasedHat(path);
}
}
});
}
VanishHook vanishHook = core.getHookManager().getVanishHook();
if (vanishHook != null) {
if (vanishHook.isVanished(player)) {
playerState.getActiveHats().forEach(hat -> hat.setVanished(true));
}
}
}
@EventHandler
public void onPlayerQuit(PlayerQuitEvent event) {
Player player = event.getPlayer();
UUID id = event.getPlayer().getUniqueId();
PlayerState playerState = core.getPlayerState(player);
@@ -89,5 +119,7 @@ public class ConnectionListener implements Listener {
playerState.clearActiveHats();
core.removePlayerState(id);
}
}
@@ -29,95 +29,139 @@ public class EntityListener implements Listener {
private boolean checkNPC = false;
public EntityListener(final CosmeticsOG core) {
this.core = core;
core.getServer().getPluginManager().registerEvents(this, core);
onReload();
}
public void onReload() {
checkPlayers = SettingsManager.COMBAT_CHECK_PLAYERS.getBoolean();
checkAnimals = SettingsManager.COMBAT_CHECK_ANIMALS.getBoolean();
checkMonsters = SettingsManager.COMBAT_CHECK_MONSTERS.getBoolean();
checkNPC = SettingsManager.COMBAT_CHECK_NPC.getBoolean();
}
/**
* Prevents item from being picked up if they were created from the ItemStack particle effect
* Prevents item from being picked up if they were created from the ItemStack
* particle effect
*
* @param event
*/
@EventHandler(priority = EventPriority.HIGHEST)
public void onItemPickup(InventoryPickupItemEvent event) {
Item item = event.getItem();
if (item.hasMetadata("PH_DroppedItem")) {
event.setCancelled(true);
}
}
@EventHandler
public void onEntityDamage(EntityDamageByEntityEvent event) {
if (event.isCancelled()) {
return;
}
Entity attacker = event.getDamager();
Entity victim = event.getEntity();
if (checkCombat(victim)) {
handleCombat(attacker);
}
if (checkCombat(attacker)) {
handleCombat(victim);
}
if (attacker instanceof Arrow) {
Arrow arrow = (Arrow) attacker;
if (arrow.getShooter() != null) {
ProjectileSource pShooter = arrow.getShooter();
if (pShooter instanceof Entity) {
Entity shooter = (Entity) pShooter;
if (checkCombat(victim)) {
handleCombat((Entity) shooter);
}
if (checkCombat(shooter)) {
handleCombat(victim);
}
}
}
}
}
private boolean checkCombat(Entity e) {
if (checkPlayers && e instanceof Player) {
return true;
}
if (checkAnimals && e instanceof Animals) {
return true;
}
if (checkMonsters && e instanceof Monster || e instanceof Slime) {
return true;
}
if (checkNPC && (e instanceof NPC || e.hasMetadata("NPC"))) {
return true;
}
return false;
}
private void handleCombat(Entity entity) {
// We don't want to create a new EntityState if one doesn't exist for this entity
// We don't want to create a new EntityState if one doesn't exist for this
// entity
if (!core.hasEntityState(entity)) {
return;
}
EntityState entityState = core.getEntityState(entity);
entityState.setLastCombatTime(System.currentTimeMillis());
entityState.setPVPState(PVPState.ENGAGED);
}
}
@@ -25,24 +25,33 @@ public class InteractListener implements Listener {
private final CosmeticsOG core;
public InteractListener(final CosmeticsOG core) {
this.core = core;
core.getServer().getPluginManager().registerEvents(this, core);
}
@SuppressWarnings("deprecation")
@EventHandler
public void onInteract(PlayerInteractEvent event) {
if (!SettingsManager.MENU_OPEN_WITH_ITEM.getBoolean()) {
return;
}
ItemStack item = event.getItem();
if (item != null) {
Material checkAgainst = SettingsManager.MENU_OPEN_WITH_ITEM_MATERIAL.getMaterial();
if (item.getType().equals(checkAgainst)) {
short durability = (short) SettingsManager.MENU_OPEN_WITH_ITEM_DAMAGE.getInt();
if (CosmeticsOG.serverVersion < 13 && item.getDurability() != durability) {
return;
}
Database database = core.getDatabase();
@@ -50,18 +59,28 @@ public class InteractListener implements Listener {
String menuName = "";
if (SettingsManager.MENU_OPEN_WITH_GROUP.getBoolean()) {
List<Group> groups = database.getGroups(true);
for (Group g : groups) {
if (player.hasPermission(Permission.GROUP.append(g.getName()))) {
menuName = g.getDefaultMenu();
}
}
} else {
menuName = SettingsManager.MENU_OPEN_DEFAULT_MENU.getString();
}
if (menuName.equals("")) {
return;
}
menuName = ResourceUtil.removeExtension(menuName);
@@ -69,9 +88,10 @@ public class InteractListener implements Listener {
MenuInventory inventory = database.loadInventory(menuName, playerState);
if (inventory == null) {
player.sendMessage(
Message.COMMAND_ERROR_UNKNOWN_MENU.getValue().replace("{1}", menuName));
player.sendMessage(Message.COMMAND_ERROR_UNKNOWN_MENU.getValue().replace("{1}", menuName));
return;
}
StaticMenuManager staticManager = core.getMenuManagerFactory().getStaticMenuManager(playerState);
@@ -79,7 +99,11 @@ public class InteractListener implements Listener {
staticManager.addMenu(menu);
menu.open();
}
}
}
}
@@ -16,57 +16,82 @@ public class InventoryListener implements Listener {
private final CosmeticsOG core;
public InventoryListener(final CosmeticsOG core) {
this.core = core;
core.getServer().getPluginManager().registerEvents(this, core);
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (!(event.getWhoClicked() instanceof Player)) {
return;
}
ItemStack item = event.getCurrentItem();
if (item != null && item.getType() != Material.AIR) {
Player player = (Player) event.getWhoClicked();
PlayerState playerState = core.getPlayerState(player);
if (playerState.hasMenuManager()) {
boolean inMenu = event.getRawSlot() < event.getInventory().getSize();
playerState.getMenuManager().onClick(event, inMenu);
}
}
}
@EventHandler
public void onInventoryClose(InventoryCloseEvent event) {
if (!(event.getPlayer() instanceof Player)) {
return;
}
Player player = (Player) event.getPlayer();
if (player.hasMetadata("NPC")) {
return;
}
PlayerState playerState = core.getPlayerState(player);
if (playerState.hasMenuManager()) {
playerState.getMenuManager().onInventoryClose(event);
}
}
@EventHandler
public void onInventoryOpen(InventoryOpenEvent event) {
if (!(event.getPlayer() instanceof Player)) {
return;
}
Player player = (Player) event.getPlayer();
PlayerState playerState = core.getPlayerState(player);
if (playerState.hasMenuManager()) {
playerState.getMenuManager().onInventoryOpen(event);
}
}
}
@@ -15,31 +15,47 @@ public class PlayerListener implements Listener {
private final CosmeticsOG plugin;
public PlayerListener(CosmeticsOG plugin) {
this.plugin = plugin;
plugin.getServer().getPluginManager().registerEvents(this, plugin);
}
@EventHandler
public void onPlayerDeath(@NotNull PlayerDeathEvent event) {
togglePlayerHats(event.getEntity(), false);
}
@EventHandler
public void onPlayerRespawn(@NotNull PlayerRespawnEvent event) {
togglePlayerHats(event.getPlayer(), true);
}
private void togglePlayerHats(Player player, boolean state) {
if (!plugin.hasEntityState(player)) {
return;
}
PlayerState playerState = plugin.getPlayerState(player);
for (Hat hat : playerState.getActiveHats()) {
if (hat.isHidden() || hat.isVanished()) {
continue;
}
hat.setIsDisplaying(state, player);
}
}
}
File diff suppressed because it is too large. Load diff
@@ -37,6 +37,7 @@ public class CommandManager implements CommandExecutor, TabCompleter {
private final MainCommand mainCommand;
public CommandManager(final CosmeticsOG core, final String command) {
this.core = core;
mainCommand = new MainCommand();
@@ -55,74 +56,106 @@ public class CommandManager implements CommandExecutor, TabCompleter {
mainCommand.register(new MetaCommand(core));
if (CosmeticsOG.debugging) {
mainCommand.register(new DebugDeleteMenu());
mainCommand.register(new DebugCommand());
}
if (core.canUseBungee()) {
mainCommand.register(new SpigotHelpCommand(core, this));
} else {
mainCommand.register(new BukkitHelpCommand(core, this));
}
// Register our command executor
core.getCommand(command).setExecutor(this);
}
@Override
public List<String> onTabComplete(
CommandSender commandSender, org.bukkit.command.Command cmd, String label, String[] args) {
public List<String> onTabComplete(CommandSender commandSender, org.bukkit.command.Command cmd, String label,
String[] args)
{
Sender sender = new Sender(commandSender);
List<String> arguments =
mainCommand.onTabComplete(core, sender, label, new ArrayList<String>(Arrays.asList(args)));
List<String> arguments = mainCommand.onTabComplete(core, sender, label,
new ArrayList<String>(Arrays.asList(args)));
String currentCommand = args[args.length - 1];
return sortCommandSuggestions(arguments, currentCommand);
}
@Override
public boolean onCommand(CommandSender commandSender, org.bukkit.command.Command cmd, String label, String[] args) {
return mainCommand.onCommand(
core, new Sender(commandSender), label, new ArrayList<String>(Arrays.asList(args)));
return mainCommand.onCommand(core, new Sender(commandSender), label,
new ArrayList<String>(Arrays.asList(args)));
}
/**
* Get all registered commands
*
* @return
*/
public Map<String, Command> getCommands() {
LinkedHashMap<String, Command> commands = new LinkedHashMap<String, Command>();
mainCommand.getSubCommands(commands);
return commands;
}
/**
* Returns a list of commands matching the currentCommand
* @param commands List of the commands the player can execute
*
* @param commands List of the commands the player can execute
* @param currentCommand Command the player is currently typing
* @return
*/
private List<String> sortCommandSuggestions(List<String> commands, String currentCommand) {
if (currentCommand.equals("")) {
return commands;
}
List<String> matchingCommands = new ArrayList<String>();
if (commands != null) {
commandLoop:
for (String s : commands) {
commandLoop: for (String s : commands) {
for (int i = 0; i < s.length(); i++) {
if (i < currentCommand.length()) {
if (s.charAt(i) != currentCommand.charAt(i)) {
continue commandLoop;
}
}
}
matchingCommands.add(s);
}
}
return matchingCommands;
}
}
@@ -24,6 +24,7 @@ public class EventManager {
private final PlayerListener playerListener;
public EventManager(final CosmeticsOG core) {
this.core = core;
inventoryListener = new InventoryListener(core);
@@ -33,9 +34,13 @@ public class EventManager {
interactListener = new InteractListener(core);
commandListener = new CommandListener(core);
playerListener = new PlayerListener(core);
}
public void onReload() {
entityListener.onReload();
}
}
@@ -20,29 +20,35 @@ public class HookManager {
this.core = core;
loadHooks();
}
public void onReload() {
loadHooks();
}
/**
* Get this plugin's CurrencyHook
*
* @return
*/
public CurrencyHook getCurrencyHook() {
return currencyHook;
}
/**
* Get this plugin's VanishHook
*
* @return
*/
public VanishHook getVanishHook() {
return vanishHook;
}
private void loadHooks() {
@@ -55,6 +61,7 @@ public class HookManager {
if (currencyHook != null && currencyHook instanceof VaultHook) {
return;
}
if (pluginManager.isPluginEnabled("Vault")) {
@@ -70,6 +77,7 @@ public class HookManager {
SettingsManager.FLAG_VAULT.addOverride(false);
currencyHook = null;
}
}
@@ -80,6 +88,7 @@ public class HookManager {
if (currencyHook != null && currencyHook instanceof TokenManagerHook) {
return;
}
if (pluginManager.isPluginEnabled("TokenManager")) {
@@ -95,7 +104,9 @@ public class HookManager {
SettingsManager.FLAG_TOKEN_MANAGER.addOverride(false);
currencyHook = null;
}
}
// Vanish Hooks.
@@ -109,7 +120,11 @@ public class HookManager {
vanishHook.unregister();
vanishHook = null;
}
}
}
}
@@ -32,10 +32,12 @@ public class ParticleManager {
this.core = core;
recentParticles = new HashMap<UUID, Deque<ParticleEffect>>();
}
/**
* Adds this particle to the list of recently used particles
*
* @param id
* @param particle
*/
@@ -47,23 +49,28 @@ public class ParticleManager {
particles = new ArrayDeque<ParticleEffect>();
recentParticles.put(id, particles);
}
// Only add unique particles, no duplicates.
if (!particles.contains(particle)) {
particles.addFirst(particle);
}
// We're only showing one menu worth of particles, so limit it to 21 slots.
if (particles.size() > 21) {
particles.removeLast();
}
}
/**
* Gets all particles recently used by the player
*
* @param id
* @return
*/
@@ -72,9 +79,11 @@ public class ParticleManager {
if (recentParticles.containsKey(id)) {
return recentParticles.get(id);
}
return emptyRecents;
}
public boolean equipHat(Player player, Hat hat) {
@@ -90,13 +99,17 @@ public class ParticleManager {
if (menu instanceof StaticMenu) {
((StaticMenu) menu).equipHat(hat);
}
}
return true;
}
return false;
}
public boolean equipHat(Player player, Hat hat, boolean showEquipMessage) {
@@ -111,17 +124,22 @@ public class ParticleManager {
Utils.cosmeticsOGPlaceholderMessage(player, Message.WORLD_DISABLED.getValue());
return false;
}
// No world permission.
if (SettingsManager.CHECK_WORLD_PERMISSION.getBoolean()) {
if (!player.hasPermission(Permission.WORLD_ALL.getPermission())
&& !player.hasPermission(Permission.WORLD.append(worldName))) {
&& !player.hasPermission(Permission.WORLD.append(worldName)))
{
Utils.cosmeticsOGPlaceholderMessage(player, Message.WORLD_NO_PERMISSION.getValue());
return false;
}
}
// Too many hats equipped.
@@ -132,17 +150,18 @@ public class ParticleManager {
if (playerState.isEquipOverflowed()) {
playerState.removeLastHat();
}
} else {
Utils.cosmeticsOGPlaceholderMessage(
player,
Message.HAT_EQUIPPED_OVERFLOW.replace(
"{1}", Integer.toString(SettingsManager.MAXIMUM_HAT_LIMIT.getInt())));
Utils.cosmeticsOGPlaceholderMessage(player, Message.HAT_EQUIPPED_OVERFLOW.replace("{1}",
Integer.toString(SettingsManager.MAXIMUM_HAT_LIMIT.getInt())));
return false;
}
}
if (playerState.canEquip()) {
@@ -154,7 +173,9 @@ public class ParticleManager {
if (vanishHook != null) {
isVanished = vanishHook.isVanished(player);
}
}
hat.setVanished(isVanished);
@@ -173,10 +194,15 @@ public class ParticleManager {
Message defaultMessage = hat.isVanished() ? Message.HAT_EQUIPPED_VANISHED : Message.HAT_EQUIPPED;
Utils.cosmeticsOGPlaceholderMessage(player, defaultMessage.replace("{1}", hat.getDisplayName()));
}
}
}
return true;
}
}
Loaded 100 of 176 files, more files were not shown because too many files have changed in this diff. Show more