From bc440bd2477d948f25c4056bc8b845851a06b0d9 Mon Sep 17 00:00:00 2001 From: hsgamer Date: Mon, 1 Jul 2024 00:58:02 +0700 Subject: [PATCH] implement FunctionalMassBuilder for some builders --- .../builder/ArgumentProcessorBuilder.java | 26 +++---------- .../bettergui/builder/ButtonBuilder.java | 26 +++---------- .../bettergui/builder/ConfigBuilder.java | 35 ++++------------- .../builder/ItemModifierBuilder.java | 26 ++++++------- .../bettergui/builder/MenuBuilder.java | 39 ++++++------------- .../bettergui/builder/RequirementBuilder.java | 26 +++---------- 6 files changed, 47 insertions(+), 131 deletions(-) diff --git a/src/main/java/me/hsgamer/bettergui/builder/ArgumentProcessorBuilder.java b/src/main/java/me/hsgamer/bettergui/builder/ArgumentProcessorBuilder.java index a6c63f74..6574586b 100644 --- a/src/main/java/me/hsgamer/bettergui/builder/ArgumentProcessorBuilder.java +++ b/src/main/java/me/hsgamer/bettergui/builder/ArgumentProcessorBuilder.java @@ -3,18 +3,16 @@ import me.hsgamer.bettergui.api.argument.ArgumentProcessor; import me.hsgamer.bettergui.api.menu.Menu; import me.hsgamer.bettergui.argument.type.*; -import me.hsgamer.hscore.builder.MassBuilder; +import me.hsgamer.hscore.builder.FunctionalMassBuilder; import me.hsgamer.hscore.collections.map.CaseInsensitiveStringMap; import java.util.Map; import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; /** * The argument processor builder */ -public final class ArgumentProcessorBuilder extends MassBuilder { +public final class ArgumentProcessorBuilder extends FunctionalMassBuilder { /** * The instance of the argument processor builder */ @@ -29,23 +27,9 @@ private ArgumentProcessorBuilder() { register(MaterialArgumentProcessor::new, "material", "item"); } - /** - * Register a new processor creator - * - * @param creator the creator - * @param type the type - */ - public void register(Function creator, String... type) { - register(input -> { - Map keys = new CaseInsensitiveStringMap<>(input.options); - String processor = Objects.toString(keys.get("type"), "store"); - for (String s : type) { - if (processor.equalsIgnoreCase(s)) { - return Optional.of(creator.apply(input)); - } - } - return Optional.empty(); - }); + @Override + protected String getType(Input input) { + return Objects.toString(new CaseInsensitiveStringMap<>(input.options).get("type"), "store"); } /** diff --git a/src/main/java/me/hsgamer/bettergui/builder/ButtonBuilder.java b/src/main/java/me/hsgamer/bettergui/builder/ButtonBuilder.java index ccf48d95..4ddc2f09 100644 --- a/src/main/java/me/hsgamer/bettergui/builder/ButtonBuilder.java +++ b/src/main/java/me/hsgamer/bettergui/builder/ButtonBuilder.java @@ -5,21 +5,19 @@ import me.hsgamer.bettergui.api.menu.Menu; import me.hsgamer.bettergui.button.*; import me.hsgamer.bettergui.config.MainConfig; -import me.hsgamer.hscore.builder.MassBuilder; +import me.hsgamer.hscore.builder.FunctionalMassBuilder; import me.hsgamer.hscore.collections.map.CaseInsensitiveStringMap; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; /** * The button builder */ -public final class ButtonBuilder extends MassBuilder { +public final class ButtonBuilder extends FunctionalMassBuilder { /** * The instance of the button builder */ @@ -42,23 +40,9 @@ private ButtonBuilder() { ); } - /** - * Register a new button creator - * - * @param creator the creator - * @param type the type - */ - public void register(Function creator, String... type) { - register(input -> { - Map keys = new CaseInsensitiveStringMap<>(input.options); - String button = Objects.toString(keys.get("type"), "simple"); - for (String s : type) { - if (button.equalsIgnoreCase(s)) { - return Optional.of(creator.apply(input)); - } - } - return Optional.empty(); - }); + @Override + protected String getType(Input input) { + return Objects.toString(new CaseInsensitiveStringMap<>(input.options).get("type"), "simple"); } /** diff --git a/src/main/java/me/hsgamer/bettergui/builder/ConfigBuilder.java b/src/main/java/me/hsgamer/bettergui/builder/ConfigBuilder.java index 373804a2..d6a16d4b 100644 --- a/src/main/java/me/hsgamer/bettergui/builder/ConfigBuilder.java +++ b/src/main/java/me/hsgamer/bettergui/builder/ConfigBuilder.java @@ -1,17 +1,15 @@ package me.hsgamer.bettergui.builder; -import me.hsgamer.hscore.builder.MassBuilder; +import me.hsgamer.hscore.builder.FunctionalMassBuilder; import me.hsgamer.hscore.bukkit.config.BukkitConfig; import me.hsgamer.hscore.config.Config; import java.io.File; -import java.util.Optional; -import java.util.function.Function; /** * The config builder */ -public class ConfigBuilder extends MassBuilder { +public class ConfigBuilder extends FunctionalMassBuilder { /** * the singleton instance */ @@ -21,28 +19,11 @@ private ConfigBuilder() { register(BukkitConfig::new, "yml", "yaml"); } - /** - * Register a new config creator - * - * @param creator the creator - * @param type the file type (extension) - */ - public void register(Function creator, String... type) { - register(file -> { - String name = file.getName(); - int index = name.lastIndexOf('.'); - if (index < 0) return Optional.empty(); - - String extension = name.substring(index + 1); - boolean isMatched = false; - for (String s : type) { - if (s.equalsIgnoreCase(extension)) { - isMatched = true; - break; - } - } - - return isMatched ? Optional.of(creator.apply(file)) : Optional.empty(); - }); + @Override + protected String getType(File input) { + String name = input.getName(); + int index = name.lastIndexOf('.'); + if (index < 0) return ""; + return name.substring(index + 1); } } diff --git a/src/main/java/me/hsgamer/bettergui/builder/ItemModifierBuilder.java b/src/main/java/me/hsgamer/bettergui/builder/ItemModifierBuilder.java index 7a2ca6b0..bbe1bc5d 100644 --- a/src/main/java/me/hsgamer/bettergui/builder/ItemModifierBuilder.java +++ b/src/main/java/me/hsgamer/bettergui/builder/ItemModifierBuilder.java @@ -2,14 +2,13 @@ import me.hsgamer.bettergui.modifier.NBTModifier; import me.hsgamer.bettergui.modifier.SkullModifier; -import me.hsgamer.hscore.builder.MassBuilder; +import me.hsgamer.hscore.builder.FunctionalMassBuilder; import me.hsgamer.hscore.bukkit.item.modifier.*; import me.hsgamer.hscore.minecraft.item.ItemModifier; import org.bukkit.inventory.ItemStack; import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.function.Supplier; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -17,7 +16,7 @@ /** * The item modifier builder */ -public class ItemModifierBuilder extends MassBuilder, ItemModifier> { +public class ItemModifierBuilder extends FunctionalMassBuilder, ItemModifier> { /** * The instance of the item modifier builder */ @@ -36,6 +35,11 @@ private ItemModifierBuilder() { register(PotionEffectModifier::new, "potion-effect", "potion", "effect"); } + @Override + protected String getType(Map.Entry input) { + return input.getKey(); + } + /** * Register a new modifier creator * @@ -44,17 +48,11 @@ private ItemModifierBuilder() { */ public void register(Supplier> creator, String... type) { register(input -> { - String modifier = input.getKey(); - for (String s : type) { - if (modifier.equalsIgnoreCase(s)) { - ItemModifier itemModifier = creator.get(); - Object value = input.getValue(); - itemModifier.loadFromObject(value); - return Optional.of(itemModifier); - } - } - return Optional.empty(); - }); + ItemModifier itemModifier = creator.get(); + Object value = input.getValue(); + itemModifier.loadFromObject(value); + return itemModifier; + }, type); } /** diff --git a/src/main/java/me/hsgamer/bettergui/builder/MenuBuilder.java b/src/main/java/me/hsgamer/bettergui/builder/MenuBuilder.java index 5743eed9..b0ce8f9c 100644 --- a/src/main/java/me/hsgamer/bettergui/builder/MenuBuilder.java +++ b/src/main/java/me/hsgamer/bettergui/builder/MenuBuilder.java @@ -4,18 +4,16 @@ import me.hsgamer.bettergui.menu.AddonMenu; import me.hsgamer.bettergui.menu.PredicateMenu; import me.hsgamer.bettergui.menu.SimpleMenu; -import me.hsgamer.hscore.builder.MassBuilder; +import me.hsgamer.hscore.builder.FunctionalMassBuilder; import me.hsgamer.hscore.config.Config; import java.util.Map; import java.util.Objects; -import java.util.Optional; -import java.util.function.Function; /** * The menu builder */ -public final class MenuBuilder extends MassBuilder { +public final class MenuBuilder extends FunctionalMassBuilder { /** * The instance of the menu builder */ @@ -27,29 +25,16 @@ private MenuBuilder() { register(PredicateMenu::new, "predicate"); } - /** - * Register a new menu creator - * - * @param creator the creator - * @param type the type - */ - public void register(Function creator, String... type) { - register(input -> { - String menu = "simple"; - for (Map.Entry entry : input.getNormalizedValues(true).entrySet()) { - String[] path = entry.getKey(); - if (path.length == 2 && path[0].equalsIgnoreCase(Menu.MENU_SETTINGS_PATH) && path[1].equalsIgnoreCase("menu-type")) { - menu = Objects.toString(entry.getValue(), "simple"); - break; - } - } - - for (String s : type) { - if (menu.equalsIgnoreCase(s)) { - return Optional.of(creator.apply(input)); - } + @Override + protected String getType(Config input) { + String type = "simple"; + for (Map.Entry entry : input.getNormalizedValues(true).entrySet()) { + String[] path = entry.getKey(); + if (path.length == 2 && path[0].equalsIgnoreCase(Menu.MENU_SETTINGS_PATH) && path[1].equalsIgnoreCase("menu-type")) { + type = Objects.toString(entry.getValue(), "simple"); + break; } - return Optional.empty(); - }); + } + return type; } } diff --git a/src/main/java/me/hsgamer/bettergui/builder/RequirementBuilder.java b/src/main/java/me/hsgamer/bettergui/builder/RequirementBuilder.java index b5dcef5d..cbf09a23 100644 --- a/src/main/java/me/hsgamer/bettergui/builder/RequirementBuilder.java +++ b/src/main/java/me/hsgamer/bettergui/builder/RequirementBuilder.java @@ -3,15 +3,12 @@ import me.hsgamer.bettergui.api.menu.Menu; import me.hsgamer.bettergui.api.requirement.Requirement; import me.hsgamer.bettergui.requirement.type.*; -import me.hsgamer.hscore.builder.MassBuilder; - -import java.util.Optional; -import java.util.function.Function; +import me.hsgamer.hscore.builder.FunctionalMassBuilder; /** * The requirement builder */ -public final class RequirementBuilder extends MassBuilder { +public final class RequirementBuilder extends FunctionalMassBuilder { public static final RequirementBuilder INSTANCE = new RequirementBuilder(); /** @@ -25,22 +22,9 @@ private RequirementBuilder() { register(ConditionRequirement::new, "condition"); } - /** - * Register a new requirement creator - * - * @param creator the creator - * @param type the type - */ - public void register(Function creator, String... type) { - register(input -> { - String requirement = input.type; - for (String s : type) { - if (requirement.equalsIgnoreCase(s)) { - return Optional.of(creator.apply(input)); - } - } - return Optional.empty(); - }); + @Override + protected String getType(Input input) { + return input.type; } /**