xeRicker

Untitled

Apr 10th, 2023
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.58 KB | None | 0 0
  1. package com.xericker.mysteryboxes.menus.menus.sendgifts;
  2.  
  3. import com.xericker.mysteryboxes.config.files.ConfigValue;
  4. import com.xericker.mysteryboxes.config.files.menus.SendGiftsMenuValue;
  5. import com.xericker.mysteryboxes.config.files.menus.ThemesMenuValue;
  6. import com.xericker.mysteryboxes.config.handlers.ConfigParser;
  7. import com.xericker.mysteryboxes.core.data.boxes.Box;
  8. import com.xericker.mysteryboxes.core.data.boxes.BoxManager;
  9. import com.xericker.mysteryboxes.core.items.BoxItemBuilder;
  10. import com.xericker.mysteryboxes.core.placeholders.GeneralPlaceholders;
  11. import com.xericker.mysteryboxes.core.placeholders.GiftPlaceholders;
  12. import com.xericker.mysteryboxes.libraries.itembuilder.ItemDisplay;
  13. import com.xericker.mysteryboxes.libraries.itembuilder.MenuItem;
  14. import com.xericker.mysteryboxes.libraries.itembuilder.MenuItemBuilder;
  15. import com.xericker.mysteryboxes.menus.Menu;
  16. import com.xericker.mysteryboxes.menus.MenuInterface;
  17. import com.xericker.mysteryboxes.menus.MenuTrigger;
  18. import com.xericker.mysteryboxes.menus.menus.openboxes.OpenBoxesTrigger;
  19. import com.xericker.mysteryboxes.playerdata.gifting.GiftingData;
  20. import com.xericker.mysteryboxes.playerdata.gifting.GiftingDataManager;
  21. import com.xericker.mysteryboxes.playerdata.menus.MenuData;
  22. import com.xericker.mysteryboxes.playerdata.menus.MenuDataManager;
  23. import com.xericker.mysteryboxes.playerdata.player.PlayerData;
  24. import com.xericker.mysteryboxes.playerdata.player.PlayerDataManager;
  25. import org.bukkit.Bukkit;
  26. import org.bukkit.configuration.file.FileConfiguration;
  27. import org.bukkit.entity.Player;
  28. import org.bukkit.event.Listener;
  29. import org.bukkit.inventory.Inventory;
  30. import org.bukkit.inventory.InventoryView;
  31. import org.bukkit.inventory.ItemStack;
  32. import org.bukkit.inventory.meta.ItemMeta;
  33.  
  34. import java.util.ArrayList;
  35. import java.util.List;
  36. import java.util.Map;
  37. import java.util.TreeMap;
  38.  
  39. public class MenuSendGifts implements MenuInterface, Listener {
  40.  
  41. /*-----------------------------------------------------------------------------------------------------------------*/
  42.  
  43. private Player player;
  44. private Inventory inventory;
  45. private List<Object> items;
  46. private int page = 1;
  47.  
  48. /*-----------------------------------------------------------------------------------------------------------------*/
  49.  
  50. private PlayerData playerData;
  51. private MenuData menuData;
  52.  
  53. /*-----------------------------------------------------------------------------------------------------------------*/
  54.  
  55. @Override
  56. public void open(Player player) {
  57. this.player = player;
  58. playerData = PlayerDataManager.getData(player);
  59.  
  60. menuData = MenuDataManager.getData(player);
  61. items = new ArrayList<>();
  62.  
  63. int rows = getRows();
  64. String title = getTitle();
  65.  
  66. Menu previousMenu = menuData.getCurrentType();
  67. inventory = Bukkit.createInventory(null, rows * 9, title);
  68. player.openInventory(inventory);
  69.  
  70. menuData = MenuDataManager.getData(player);
  71. menuData.setMenu(this);
  72. menuData.setKeepData(false);
  73.  
  74. menuData.setPreviousType(previousMenu);
  75.  
  76. menuData.setPreviousType(previousMenu);
  77. menuData.setCurrentType(Menu.SEND_GIFTS);
  78.  
  79. if (previousMenu != Menu.SEND_GIFTS) {
  80. GiftingDataManager.removeData(player.getUniqueId());
  81. }
  82. update();
  83. }
  84.  
  85. /*-----------------------------------------------------------------------------------------------------------------*/
  86.  
  87. @Override
  88. public void update() {
  89. FileConfiguration menuFile = Menu.SEND_GIFTS.getConfig();
  90. if (menuFile == null) return;
  91.  
  92. GiftingData giftingData = GiftingDataManager.getData(player);
  93.  
  94. InventoryView invView = player.getOpenInventory();
  95. if (!invView.getTitle().equals(getTitle())) {
  96. menuData.setKeepData(true);
  97. open(player);
  98. }
  99.  
  100. List<MenuItemBuilder> itemBuilders = Menu.getItems(ItemDisplay.MENU, menuFile, player, inventory);
  101. List<Object> objectsDisplayed = new ArrayList<>();
  102.  
  103. List<Integer> giftLayout = Menu.getLayout('X', ConfigParser.getStringList(SendGiftsMenuValue.LAYOUT_GIFT_LAYOUT));
  104. List<Integer> playerLayout = Menu.getLayout('X', ConfigParser.getStringList(SendGiftsMenuValue.LAYOUT_PLAYER_LAYOUT));
  105.  
  106. boolean sortByPriority = ConfigParser.getBoolean(SendGiftsMenuValue.LAYOUT_SORT_GIFTS);
  107. boolean mergeByType = ConfigParser.getBoolean(SendGiftsMenuValue.LAYOUT_MERGE_GIFTS);
  108. boolean unlockGifts = ConfigParser.getBoolean(ConfigValue.UNLOCK_GIFTS);
  109.  
  110. /*-----------------------------
  111. # CHOOSE GIFT
  112. -----------------------------*/
  113.  
  114. if (giftingData.getGiftingState() == GiftingData.GiftingState.CHOOSE_GIFT) {
  115. TreeMap<Integer, Box> gifts = new TreeMap<>();
  116. for (Box box : BoxManager.getBoxList()) {
  117. int giftsAvailable = playerData.getGifts(box);
  118. if (unlockGifts && giftsAvailable == 0) giftsAvailable = 1;
  119.  
  120. if (box.getBoxStatus() != Box.BoxStatus.ENABLED) continue;
  121. if (giftsAvailable == 0) continue;
  122.  
  123. if (!sortByPriority) {
  124. gifts.put(gifts.lastKey() + 1, box);
  125. continue;
  126. }
  127.  
  128. int priority = gifts.isEmpty() ? box.getBoxSettings().priority : gifts.lastKey() + box.getBoxSettings().priority;
  129. gifts.put(priority, box);
  130. }
  131.  
  132. int giftIndex = -1;
  133. int giftLayoutIndex = -1;
  134.  
  135. int skipIndex = giftLayout.size() * (page - 1);
  136. if (page > 1) skipIndex++;
  137.  
  138. int totalGifts = 0;
  139. for (Box box : playerData.getBoxes().keySet()) {
  140. int giftsAvailable = playerData.getGifts(box);
  141. if (unlockGifts && giftsAvailable == 0) giftsAvailable = 1;
  142.  
  143. if (mergeByType) totalGifts++;
  144. else totalGifts += giftsAvailable;
  145. }
  146.  
  147. for (Map.Entry<Integer, Box> boxSet : gifts.entrySet()) {
  148. Box box = boxSet.getValue();
  149.  
  150. int giftsAvailable = playerData.getGifts(box);
  151. if (unlockGifts && giftsAvailable == 0) giftsAvailable = 1;
  152.  
  153. for (int i = 0; i < (!mergeByType ? giftsAvailable : 1); i++) {
  154. giftIndex++;
  155. if (giftIndex < skipIndex - 1) continue;
  156.  
  157. giftLayoutIndex++;
  158. if (giftLayoutIndex >= giftLayout.size()) break;
  159.  
  160. GiftPlaceholders.GiftPlaceholder giftPlaceholder = GiftPlaceholders.getPlaceholder(player, box);
  161. SendGiftsMenuValue boxStatusValue = null;
  162. switch (giftPlaceholder) {
  163. case CLICK_TO_GIFT -> boxStatusValue = SendGiftsMenuValue.BOX_STATUS_CLICK_TO_GIFT;
  164. case UNAVAILABLE -> boxStatusValue = SendGiftsMenuValue.BOX_STATUS_UNAVAILABLE;
  165. case NO_PERMISSION -> boxStatusValue = SendGiftsMenuValue.BOX_STATUS_NO_PERMISSION;
  166. }
  167.  
  168. MenuItemBuilder boxInstance = null;
  169. for (MenuItemBuilder itemBuilder : Menu.getItems(ItemDisplay.MENU, menuFile, player, inventory)) {
  170. if (!itemBuilder.equalsTrigger(OpenBoxesTrigger.BOX_INSTANCE)) continue;
  171. boxInstance = itemBuilder;
  172. }
  173.  
  174. if (boxInstance != null) {
  175. ItemStack boxItem = BoxItemBuilder.getItem(player, box, true);
  176. ItemMeta boxMeta = boxItem.getItemMeta();
  177. if (boxMeta == null) continue;
  178.  
  179. String instanceName = boxInstance.getItem().getName();
  180. instanceName = GeneralPlaceholders.translate(player, box, instanceName);
  181.  
  182. List<String> instanceLore = new ArrayList<>();
  183. for (String loreLine : boxInstance.getItem().getLore()) {
  184. List<String> boxDescription = boxMeta.getLore();
  185. if (loreLine.contains("{BOX_DESCRIPTION") && boxDescription != null) {
  186. instanceLore.addAll(boxDescription);
  187. continue;
  188. }
  189.  
  190. String boxStatusPlaceholder = ConfigParser.getString(boxStatusValue);
  191. if (boxStatusPlaceholder == null) boxStatusPlaceholder = "§c⚠ Placeholder is NULL";
  192. loreLine = loreLine.replace("{STATUS_PLACEHOLDER}", boxStatusPlaceholder);
  193.  
  194. loreLine = GeneralPlaceholders.translate(player, box, loreLine);
  195. instanceLore.add(loreLine);
  196. }
  197.  
  198. boxInstance.getItem().setName(instanceName);
  199. boxInstance.getItem().setLore(instanceLore);
  200.  
  201. boxInstance.getItem().setType(boxItem.getType());
  202. boxInstance.getItem().setPlayerHead(box.getBoxSettings().playerHead);
  203. boxInstance.getItem().setCustomHead(box.getBoxSettings().customHead);
  204.  
  205. boxInstance.addTag("boxId", box.getBoxId());
  206. boxInstance.setSlot(giftLayout.get(giftLayoutIndex));
  207.  
  208. boxInstance.build();
  209. objectsDisplayed.add(boxInstance);
  210. }
  211. }
  212. }
  213.  
  214. for (MenuItemBuilder itemBuilder : itemBuilders) {
  215. boolean equalsNoGifts = itemBuilder.equalsTrigger(SendGiftsTrigger.NO_GIFTS);
  216. if (equalsNoGifts && gifts.size() > 0) continue;
  217.  
  218. boolean equalsGoToPreviousPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_PREVIOUS_PAGE);
  219. if (equalsGoToPreviousPage && page <= 1) continue;
  220.  
  221. boolean equalsGoToNextPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_NEXT_PAGE);
  222. if (equalsGoToNextPage && skipIndex >= totalGifts - giftLayout.size()) continue;
  223.  
  224. if (!equalsNoGifts && !equalsGoToPreviousPage && !equalsGoToNextPage) continue;
  225. itemBuilder.build();
  226. objectsDisplayed.add(itemBuilder);
  227. }
  228. }
  229.  
  230. /*-----------------------------
  231. # CHOOSE RECEIVER
  232. -----------------------------*/
  233.  
  234. if (giftingData.getGiftingState() == GiftingData.GiftingState.CHOOSE_RECEIVER) {
  235. List<Player> receivers = new ArrayList<>(Bukkit.getOnlinePlayers());
  236. receivers.remove(player);
  237.  
  238. int playerIndex = -1;
  239. int playerLayoutIndex = -1;
  240.  
  241. int skipIndex = playerLayout.size() * (page - 1);
  242. if (page > 1) skipIndex++;
  243.  
  244. Box gift = giftingData.getChosenGift();
  245. for (Player receiver : receivers) {
  246. playerIndex++;
  247. if (playerIndex < skipIndex - 1) continue;
  248.  
  249. playerLayoutIndex++;
  250. if (playerLayoutIndex == playerLayout.size()) break;
  251.  
  252. MenuItemBuilder receiverInstance = null;
  253. for (MenuItemBuilder menuItemBuilder2 : Menu.getItems(ItemDisplay.MENU, menuFile, player, inventory)) {
  254. if (!menuItemBuilder2.equalsTrigger(SendGiftsTrigger.RECEIVER)) continue;
  255. receiverInstance = menuItemBuilder2;
  256. }
  257.  
  258. if (receiverInstance != null) {
  259. MenuItem menuItem = receiverInstance.getItem();
  260.  
  261. menuItem.setName(GeneralPlaceholders.translate(receiver, gift, menuItem.getName()));
  262. menuItem.setName(menuItem.getName().replace("{RECEIVER}", receiver.getName()));
  263.  
  264. List<String> lore = new ArrayList<>();
  265. for (String loreLine : menuItem.getLore()) {
  266. loreLine = loreLine.replace("{RECEIVER}", receiver.getName());
  267.  
  268. loreLine = GeneralPlaceholders.translate(player, gift, loreLine);
  269. lore.add(loreLine);
  270. }
  271. menuItem.setLore(lore);
  272.  
  273. receiverInstance.addTag("receiverId", receiver.getUniqueId().toString());
  274. receiverInstance.setSlot(giftLayout.get(playerLayoutIndex));
  275. receiverInstance.build();
  276. objectsDisplayed.add(receiverInstance);
  277. }
  278. }
  279.  
  280. for (MenuItemBuilder itemBuilder : itemBuilders) {
  281. boolean equalsNoPlayers = itemBuilder.equalsTrigger(SendGiftsTrigger.NO_PLAYERS);
  282. if (equalsNoPlayers && receivers.size() > 0) continue;
  283.  
  284. boolean equalsGoToPreviousPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_PREVIOUS_PAGE);
  285. if (equalsGoToPreviousPage && page <= 1) continue;
  286.  
  287. boolean equalsGoToNextPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_NEXT_PAGE);
  288. if (equalsGoToNextPage && skipIndex >= receivers.size() - playerLayout.size()) continue;
  289.  
  290. if (!equalsNoPlayers && !equalsGoToPreviousPage && !equalsGoToNextPage) continue;
  291. itemBuilder.build();
  292. objectsDisplayed.add(itemBuilder);
  293. }
  294. }
  295.  
  296. decorationItems:
  297. for (MenuItemBuilder itemBuilder : itemBuilders) {
  298. for (SendGiftsTrigger sendGiftsMenuTrigger : SendGiftsTrigger.values()) {
  299. if (itemBuilder.equalsTrigger(sendGiftsMenuTrigger)) continue decorationItems;
  300.  
  301. boolean equalsGoToPreviousPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_PREVIOUS_PAGE);
  302. boolean equalsGoToNextPage = itemBuilder.equalsTrigger(MenuTrigger.GO_TO_NEXT_PAGE);
  303. if (equalsGoToPreviousPage || equalsGoToNextPage) continue decorationItems;
  304. }
  305. itemBuilder.build();
  306. objectsDisplayed.add(itemBuilder);
  307. }
  308.  
  309. items.clear();
  310. items.addAll(objectsDisplayed);
  311.  
  312. Menu.clear(inventory, objectsDisplayed);
  313. }
  314.  
  315. /*-----------------------------------------------------------------------------------------------------------------*/
  316.  
  317. public int getRows() {
  318. int rows = ConfigParser.getInt(SendGiftsMenuValue.MENU_ROWS);
  319. rows = Math.min(rows, 6);
  320. if (rows <= 0) rows = 6;
  321. return rows;
  322. }
  323.  
  324. public String getTitle() {
  325. GiftingData giftingData = GiftingDataManager.getData(player);
  326.  
  327. SendGiftsMenuValue titleValue = giftingData.getGiftingState() == GiftingData.GiftingState.CHOOSE_GIFT
  328. ? SendGiftsMenuValue.TITLE_GIFT : SendGiftsMenuValue.TITLE_RECEIVER;
  329. if (page > 1) titleValue = giftingData.getGiftingState() == GiftingData.GiftingState.CHOOSE_GIFT
  330. ? SendGiftsMenuValue.TITLE_WITH_PAGES_GIFT : SendGiftsMenuValue.TITLE_WITH_PAGES_RECEIVER;
  331.  
  332. String title = ConfigParser.getString(titleValue);
  333. if (title != null) title = title.replace("{PAGE}", String.valueOf(page));
  334. if (title == null) title = "§c⚠ Title is NULL";
  335. return title;
  336. }
  337.  
  338. @Override
  339. public int getPage() {
  340. return page;
  341. }
  342.  
  343. @Override
  344. public void setPage(int page) {
  345. this.page = page;
  346. }
  347.  
  348. @Override
  349. public List<Object> getItems() {
  350. return items;
  351. }
  352.  
  353. /*-----------------------------------------------------------------------------------------------------------------*/
  354. }
  355.  
Advertisement
Add Comment
Please, Sign In to add comment