11package me .hsgamer .bettergui .menu ;
22
3+ import io .github .projectunified .craftitem .core .ItemModifier ;
4+ import io .github .projectunified .craftitem .spigot .core .SpigotItem ;
35import io .github .projectunified .craftux .common .*;
46import io .github .projectunified .craftux .spigot .SpigotInventoryUtil ;
57import me .hsgamer .bettergui .builder .ItemModifierBuilder ;
810import me .hsgamer .bettergui .downloader .AddonDownloader ;
911import me .hsgamer .bettergui .manager .AddonManager ;
1012import me .hsgamer .bettergui .util .StringReplacerApplier ;
11- import me .hsgamer .hscore .bukkit .item .BukkitItemBuilder ;
1213import me .hsgamer .hscore .bukkit .utils .MessageUtils ;
1314import me .hsgamer .hscore .common .MapUtils ;
1415import me .hsgamer .hscore .config .Config ;
1516import me .hsgamer .hscore .downloader .core .object .DownloadInfo ;
16- import me .hsgamer .hscore .minecraft .item .ItemBuilder ;
1717import org .bukkit .entity .HumanEntity ;
1818import org .bukkit .event .inventory .ClickType ;
1919import org .bukkit .event .inventory .InventoryClickEvent ;
20- import org .bukkit .inventory .ItemStack ;
2120import org .jetbrains .annotations .NotNull ;
2221
2322import java .util .*;
2423import java .util .function .Consumer ;
24+ import java .util .function .UnaryOperator ;
2525import java .util .logging .Level ;
2626
2727import static me .hsgamer .bettergui .BetterGUI .getInstance ;
@@ -38,7 +38,7 @@ public class AddonMenu extends BaseInventoryMenu<Mask> {
3838 private final String upToDateStatus ;
3939 private final String availableStatus ;
4040 private final String outdatedStatus ;
41- private final Map < String , Object > itemMap ;
41+ private final List < ItemModifier > itemModifiers ;
4242
4343 public AddonMenu (Config config ) {
4444 super (config );
@@ -49,7 +49,8 @@ public AddonMenu(Config config) {
4949 upToDateStatus = Objects .toString (config .get ("&aUp-to-date" , new String []{STATUS_PATH , "up-to-date" }));
5050 availableStatus = Objects .toString (config .get ("&aAvailable" , new String []{STATUS_PATH , "available" }));
5151 outdatedStatus = Objects .toString (config .get ("&cOutdated" , new String []{STATUS_PATH , "outdated" }));
52- itemMap = MapUtils .castOptionalStringObjectMap (configSettings .get (BUTTON_PATH )).orElseThrow (() -> new IllegalStateException ("The button map must be a map" ));
52+ Map <String , Object > itemMap = MapUtils .castOptionalStringObjectMap (configSettings .get (BUTTON_PATH )).orElseThrow (() -> new IllegalStateException ("The button map must be a map" ));
53+ itemModifiers = ItemModifierBuilder .INSTANCE .build (itemMap );
5354 }
5455
5556 @ Override
@@ -67,9 +68,7 @@ private class AddonMask implements Mask, Element {
6768 int slot = 0 ;
6869 for (DownloadInfo info : downloadInfos ) {
6970 AddonButton button = addonButtonMap .computeIfAbsent (info , downloadInfo -> {
70- ItemBuilder <ItemStack > itemBuilder = new BukkitItemBuilder ();
71- ItemModifierBuilder .INSTANCE .build (itemMap ).forEach (itemBuilder ::addItemModifier );
72- AddonButton addonButton = new AddonButton (downloadInfo , itemBuilder );
71+ AddonButton addonButton = new AddonButton (downloadInfo );
7372 addonButton .init ();
7473 return addonButton ;
7574 });
@@ -87,20 +86,20 @@ public void stop() {
8786
8887 private class AddonButton implements Button , Element {
8988 private final DownloadInfo downloadInfo ;
90- private final ItemBuilder < ItemStack > itemBuilder ;
89+ private final UnaryOperator < String > translator ;
9190 private String status = "" ;
9291
93- AddonButton (DownloadInfo downloadInfo , ItemBuilder < ItemStack > itemBuilder ) {
92+ AddonButton (DownloadInfo downloadInfo ) {
9493 this .downloadInfo = downloadInfo ;
95- this .itemBuilder = itemBuilder ;
96- itemBuilder . addStringReplacer ( original -> original
97- .replace ("{status}" , status )
98- .replace ("{name}" , downloadInfo .getName ())
99- .replace ("{version}" , downloadInfo .getVersion ())
100- .replace ("{description}" , AdditionalInfoKeys .DESCRIPTION .get (downloadInfo ))
101- .replace ("{author}" , AdditionalInfoKeys .AUTHORS .get (downloadInfo ).toString ())
102- );
103- itemBuilder . addStringReplacer ( StringReplacerApplier . COLORIZE ) ;
94+ this .translator = s -> {
95+ s = s
96+ .replace ("{status}" , status )
97+ .replace ("{name}" , downloadInfo .getName ())
98+ .replace ("{version}" , downloadInfo .getVersion ())
99+ .replace ("{description}" , AdditionalInfoKeys .DESCRIPTION .get (downloadInfo ))
100+ .replace ("{author}" , AdditionalInfoKeys .AUTHORS .get (downloadInfo ).toString ());
101+ return StringReplacerApplier . COLORIZE . replace ( s );
102+ } ;
104103 }
105104
106105 private void updateStatus () {
@@ -117,7 +116,11 @@ public void init() {
117116 @ Override
118117 public boolean apply (@ NotNull UUID uuid , @ NotNull ActionItem actionItem ) {
119118 updateStatus ();
120- actionItem .setItem (itemBuilder .build (uuid ));
119+ SpigotItem item = new SpigotItem ();
120+ for (ItemModifier itemModifier : itemModifiers ) {
121+ itemModifier .modify (item , translator );
122+ }
123+ actionItem .setItem (item .getItemStack ());
121124 actionItem .setAction (InventoryClickEvent .class , event -> {
122125 HumanEntity humanEntity = event .getWhoClicked ();
123126 ClickType clickType = event .getClick ();
0 commit comments