From 3fef65b9030e49543700a67eac9d886fff43c648 Mon Sep 17 00:00:00 2001 From: Big Pappa Date: Thu, 6 Aug 2026 22:07:12 -0500 Subject: [PATCH] Initial release v1.0.0 --- .git-pre-1.0/COMMIT_EDITMSG | 4 + .git-pre-1.0/HEAD | 1 + .git-pre-1.0/config | 10 + .git-pre-1.0/description | 1 + .git-pre-1.0/hooks/applypatch-msg.sample | 15 + .git-pre-1.0/hooks/commit-msg.sample | 74 +++ .git-pre-1.0/hooks/fsmonitor-watchman.sample | 168 ++++++ .git-pre-1.0/hooks/post-update.sample | 8 + .git-pre-1.0/hooks/pre-applypatch.sample | 14 + .git-pre-1.0/hooks/pre-commit.sample | 49 ++ .git-pre-1.0/hooks/pre-merge-commit.sample | 13 + .git-pre-1.0/hooks/pre-push.sample | 53 ++ .git-pre-1.0/hooks/pre-rebase.sample | 169 ++++++ .git-pre-1.0/hooks/pre-receive.sample | 24 + .git-pre-1.0/hooks/prepare-commit-msg.sample | 42 ++ .git-pre-1.0/hooks/push-to-checkout.sample | 78 +++ .git-pre-1.0/hooks/sendemail-validate.sample | 77 +++ .git-pre-1.0/hooks/update.sample | 128 +++++ .git-pre-1.0/index | Bin 0 -> 29242 bytes .git-pre-1.0/info/exclude | 6 + .git-pre-1.0/info/refs | 2 + .git-pre-1.0/logs/HEAD | 63 ++ .git-pre-1.0/logs/refs/heads/main | 62 ++ .../00/3f9724e48adcf06b0ab65d6f41864743d18ba0 | 5 + .../01/a36d563b889e12a73ea3ba9b61298325c5e6c7 | 1 + .../05/caa9970a260d34ace5ec3accb75f35b9e2b526 | Bin 0 -> 843 bytes .../06/d04659cdf7f38ab3fecafc1d918475fbb64d72 | Bin 0 -> 1395 bytes .../07/365705b95af7b82539f4beee71e137bdd3dc00 | Bin 0 -> 131 bytes .../0f/b041ab9a3e50c32e214c4e5eccbca16bbc5c45 | Bin 0 -> 53 bytes .../10/0c4bc4d635022ca45e587d7ccb4c6793faee46 | Bin 0 -> 46 bytes .../12/3ade710a80790a98e3b809dc582d73b2dc4294 | Bin 0 -> 327 bytes .../13/ce049bd7dc0cebc74f6b3481ae591e4de0ceca | Bin 0 -> 205 bytes .../14/d95a10aa13043845065aa1640e5bd73106e07b | Bin 0 -> 1858 bytes .../15/3dbfe75bf61a8fbbabc19541e62f15cf3b5f68 | Bin 0 -> 189 bytes .../19/d1108c3ab541278310e83d598b836546a0ed3d | Bin 0 -> 45 bytes .../1a/95bf9648a636d911e37882b2d3111863e1fb92 | Bin 0 -> 783 bytes .../1e/a03c378b1e613898f18cebca08ffb8c57363c6 | Bin 0 -> 899 bytes .../2b/43b549e4ef368f27b23e2227c2b276b94edfe3 | Bin 0 -> 107 bytes .../2c/5edf8a15831ae177af338986af362acc0dc590 | Bin 0 -> 79 bytes .../2d/0915bcf166d79de4cffbc789b8611c377d21bc | Bin 0 -> 812 bytes .../2e/a1a4539f2fba8442f564adbe7dee01c0fb725e | Bin 0 -> 145 bytes .../38/65bd8e0b9c5bbbd4abc33898b0a71f7a0628bd | Bin 0 -> 812 bytes .../3a/f202a42b5d541830d39daf6b5e3f7e4e6334dd | Bin 0 -> 53 bytes .../3b/f9143247bb4778ba384e2b474ce0b0e2823cfe | Bin 0 -> 697 bytes .../3d/15d25103d8da32a89a0747c0bb3778654758c0 | Bin 0 -> 1090 bytes .../3d/3e6cc0841729a20d7ccd9a741971e2e08cadbd | Bin 0 -> 380 bytes .../3d/eea135869843563fdb1165aceba5c119567ca1 | Bin 0 -> 210 bytes .../3f/04136ec6f8147f5fc97b89d555ab154a0fa0c3 | Bin 0 -> 1114 bytes .../3f/4fab88a50a49d64299d9aa598332944d1a9203 | Bin 0 -> 967 bytes .../40/f09d8f822ebc96117541c56c6d1888f7b925de | Bin 0 -> 53 bytes .../4c/0c90a62ada915a4e7668c88b95fcc3725dfad7 | 1 + .../4c/e4417b9d46e7ffb2bf1a47964d27675f383d2b | Bin 0 -> 546 bytes .../4d/31deee871a5835aa028f17e66d28b12e0005f7 | 4 + .../4e/3aa7ae6ef142b35e0bce17f7c5950c1bb98b14 | Bin 0 -> 855 bytes .../4e/813b475a536557dfb88e26faeaaa90c228e84e | Bin 0 -> 861 bytes .../55/a57bd9f687ffd29130601da7c851f6b896867d | Bin 0 -> 53 bytes .../56/e00e09f253d17caa894365f14d117072d84bce | Bin 0 -> 54 bytes .../57/1820270693f059df21f8ca515f8a47143d1020 | Bin 0 -> 91 bytes .../58/64829a3132fd41a16701086b5c4cccbfc985b9 | Bin 0 -> 544 bytes .../58/c04451c6e7ab13c6c841784976fa314718da7c | Bin 0 -> 307 bytes .../5c/5363c25682a6dc8a19262fc63d4b1f123e318b | Bin 0 -> 177 bytes .../5e/58df6db7c6a757a4f4c99c7cc952df24b6414e | Bin 0 -> 79 bytes .../61/24496e14f549282ebca2756dfdc87170fb9b6b | Bin 0 -> 933 bytes .../62/cf7d13a08c282752ec26c3b2d935d58212242a | Bin 0 -> 146 bytes .../63/7a511eb808f4d523ee7bfb829c315c38f3b39d | Bin 0 -> 94 bytes .../64/e681ec731bae20d090e1800df608dea71e2551 | Bin 0 -> 193 bytes .../66/ac0fbe65eac74c80b16ba8d9b91425f114b011 | Bin 0 -> 387 bytes .../6b/57394b6352aaa4db4266a6b3c386148486894d | 3 + .../6b/ca02b5b4ec05078120aefde5301be5398f1c00 | Bin 0 -> 177 bytes .../77/667f90a21eb33e2cc6f90b0c79b084fc2479de | Bin 0 -> 2802 bytes .../78/42c8b4cb8d0742017a95e1d569ce805b66d6e9 | Bin 0 -> 699 bytes .../7d/3a406e6ce451654b545e18d83b5d5cd49dd4d2 | Bin 0 -> 254 bytes .../87/caea6138c6ef56e6a3fea0286f75f29617d288 | Bin 0 -> 80 bytes .../89/ebfcd0801d44aef767f5cea22d49c6669e6a04 | Bin 0 -> 56 bytes .../8c/74e90f09a6d6639fd5d841b2d1a832e901b98a | Bin 0 -> 968 bytes .../8c/fcfd13ef32648f6de4ba6db9a1d05435c4ea17 | Bin 0 -> 423 bytes .../8d/8f6e0905d4e86622b8709e4a852d0a4b97822b | Bin 0 -> 47 bytes .../90/02f9d05dd907e3e4c73ba86d3a62de8ff19707 | Bin 0 -> 45 bytes .../95/1db2564705080a8d51749ab7ca681a6c5fe37e | Bin 0 -> 199 bytes .../96/5a6e24d8a047502018a7dfce1b5856e3b613b7 | Bin 0 -> 1061 bytes .../96/d4025f373135f533594f0b3d187db6bc6c4736 | Bin 0 -> 54 bytes .../98/389e10e02620a82049013138909cb27e6d2dde | Bin 0 -> 107 bytes .../9b/6e4cf0d7cc95476f9dda06ce677868a117192f | Bin 0 -> 194 bytes .../9b/a60f2cbd6a72640af0bac05a494c9d7da37733 | Bin 0 -> 175 bytes .../9f/30a6045b9268c4c231b8c4363f5e7dcafea294 | Bin 0 -> 797 bytes .../a2/3ed12ecbf59c4aaca39eeb99c27e9953b4ee77 | Bin 0 -> 45 bytes .../a3/0e5a4b42d7e5d4ce60548fa59d33616d527201 | Bin 0 -> 990 bytes .../a3/227846e5d224078a76d9197a0a34cb44c455f4 | Bin 0 -> 968 bytes .../a4/5c1cba928608dac43b552d67c421b79ccc3837 | Bin 0 -> 99 bytes .../b0/d865f612861260ba30daf6c9c67f5499efb12b | Bin 0 -> 627 bytes .../b1/000215825dc6c9bb3a0a6a5d986fe653eb2da0 | Bin 0 -> 1488 bytes .../b4/1f03b15a67b056cd45f3f9f82f6cdff46f9e04 | Bin 0 -> 1289 bytes .../b5/7489f9d18302c2317d0a66c825f4b607e34634 | Bin 0 -> 1828 bytes .../b8/1e66f6edf51af69ba071ad12be19b3708421bd | Bin 0 -> 148 bytes .../bd/80165fccd781bd1f1cf58b51ce0ecb228396cf | Bin 0 -> 543 bytes .../be/6f008c8de5e4a2c05c1138853ba86f8a8bbeb2 | Bin 0 -> 771 bytes .../bf/8553f0fa63816bb36aad321889d9aa18113045 | Bin 0 -> 208 bytes .../c0/91f0b5dff117b60c98a5a6bc1def04713753bc | Bin 0 -> 133 bytes .../c1/9ce9ce854396c1daed26e5fdf5066f945d3c6a | Bin 0 -> 386 bytes .../c3/d02bf241629e830cb5067fab2ec5b6202234e6 | Bin 0 -> 45 bytes .../c5/2c001ecff0ab68fa0c88e0006b343fdf9767c7 | Bin 0 -> 101 bytes .../c6/032fbe50b11cb7dd78b00c28b34d81041006a5 | Bin 0 -> 53 bytes .../cd/7ab01c69c5ff00d52b667cd47760b61408d307 | Bin 0 -> 1700 bytes .../cf/644a4ccd8919db1e93d58b9cd94fa122cc0aab | Bin 0 -> 564 bytes .../d1/581b939b6938a23920a5174063a9d26ed3482d | Bin 0 -> 47 bytes .../db/bffc4131e908cf5c674803cba45031195aef41 | Bin 0 -> 970 bytes .../e0/249262d6f4ccdb5e61b031b3a662527b9876c9 | Bin 0 -> 1141 bytes .../e0/e5d1cc99ec34272576aeea559fe187d6b8ba93 | Bin 0 -> 867 bytes .../e2/0980d6d4ddb800eee347122f6315eb3889d6db | Bin 0 -> 544 bytes .../e7/81d97a54ae37d929e3204da59d9671c68223d1 | 2 + .../ea/9c5db9d386b871a83595de63c78767fa9927b9 | Bin 0 -> 240 bytes .../ec/143d5ae39c2032a7b66d807f37448f0de53602 | Bin 0 -> 147 bytes .../f1/b5082328aacc6af4f8026388475acaad3c7203 | Bin 0 -> 175 bytes .../f2/cebb98ef105f9ea6f64437342283aa345ca5ca | Bin 0 -> 1308 bytes .../f3/7f1a831caf4571f7f50161e7e720524e5b9e6b | Bin 0 -> 79 bytes .../f3/ffb87e0ed77052fa98adfb1c274cd33cb92dc6 | Bin 0 -> 46 bytes .../f6/3e7571560668e84211b8f8e417959c0f4cbe0c | Bin 0 -> 711 bytes .../fa/a21502f476a2e25a6e52aab982692b60f614ce | 3 + .../fd/d749167f6b4ddba420531c63540498a06f88be | Bin 0 -> 855 bytes .../fe/6e623bd6886270b5cd485c2be62beab4e1d86a | Bin 0 -> 53 bytes .git-pre-1.0/objects/info/packs | 3 + .git-pre-1.0/objects/pack/multi-pack-index | Bin 0 -> 65644 bytes ...1227e431babe2a5e47fb5d2d6e3b5947591f33.idx | Bin 0 -> 16164 bytes ...7e431babe2a5e47fb5d2d6e3b5947591f33.mtimes | Bin 0 -> 2208 bytes ...227e431babe2a5e47fb5d2d6e3b5947591f33.pack | Bin 0 -> 154457 bytes ...1227e431babe2a5e47fb5d2d6e3b5947591f33.rev | Bin 0 -> 2208 bytes ...35a9249202c299756cc28e67675855546a7a4d.idx | Bin 0 -> 50408 bytes ...5a9249202c299756cc28e67675855546a7a4d.pack | Bin 0 -> 421216 bytes ...35a9249202c299756cc28e67675855546a7a4d.rev | Bin 0 -> 7100 bytes .git-pre-1.0/refs/heads/main | 1 + .gitignore | 39 ++ .idea/.gitignore | 10 + .idea/encodings.xml | 7 + .idea/inspectionProfiles/Project_Default.xml | 6 + .idea/misc.xml | 12 + .idea/vcs.xml | 6 + pom.xml | 79 +++ .../rsscripting/rswarehouse/RSWarehouse.java | 164 ++++++ .../rswarehouse/admin/AdminMenu.java | 192 +++++++ .../rswarehouse/admin/AdminMenuListener.java | 138 +++++ .../admin/admindao/CategoryPlacementDAO.java | 62 ++ .../admin/admindao/CreateCategoryDAO.java | 89 +++ .../admin/admindao/CreateSubCategoryDAO.java | 136 +++++ .../admin/admindao/PurgeVariantsDAO.java | 130 +++++ .../admin/admindao/UpdateCategoryDAO.java | 140 +++++ .../admindao/WarehouseStatisticsDAO.java | 169 ++++++ .../adminsessions/CategoryEditSession.java | 138 +++++ .../CategoryEditSessionManager.java | 54 ++ .../CategoryOptionsMenuListener.java | 4 + .../CategoryPageSlotSession.java | 56 ++ .../CategoryPageSlotSessionManager.java | 49 ++ .../PageSlotAssignmentSession.java | 85 +++ .../PageSlotAssignmentSessionManager.java | 80 +++ .../SubCategoryCreationSession.java | 118 ++++ .../SubCategoryCreationSessionManager.java | 47 ++ .../adminsessions/SubCategoryEditSession.java | 83 +++ .../SubCategoryEditSessionManager.java | 53 ++ .../CategoryPageNumberMenu.java | 126 ++++ .../CategoryPageNumberMenuListener.java | 157 +++++ .../CategorySlotNumberMenu.java | 118 ++++ .../CategorySlotNumberMenuListener.java | 181 ++++++ .../admin/assignpageslot/PageNumberMenu.java | 120 ++++ .../PageNumberMenuListener.java | 157 +++++ .../admin/assignpageslot/SlotNumberMenu.java | 112 ++++ .../SlotNumberMenuListener.java | 184 ++++++ .../autodeposit/AutoDepositMenu.java | 161 ++++++ .../autodeposit/AutoDepositMenuListener.java | 190 ++++++ .../AutoDepositPickupListener.java | 97 ++++ .../autodepositdao/AutoDepositDAO.java | 346 +++++++++++ .../CategoryDisplayNameMenu.java | 93 +++ .../CategoryDisplayNameMenuListener.java | 158 +++++ .../CategoryLoreChatListener.java | 130 +++++ .../categorycreation/CategoryLoreMenu.java | 144 +++++ .../CategoryLoreMenuListener.java | 236 ++++++++ .../CategoryMaterialPickerMenu.java | 110 ++++ .../CategoryMaterialPickerMenuListener.java | 109 ++++ .../categorycreation/CategoryNameMenu.java | 94 +++ .../CategoryNameMenuListener.java | 145 +++++ .../CategoryEditDisplayNameMenu.java | 101 ++++ .../CategoryEditDisplayNameMenuListener.java | 159 +++++ .../categoryedit/CategoryEditLoreMenu.java | 169 ++++++ .../CategoryEditLoreMenuChatListener.java | 146 +++++ .../CategoryEditLoreMenuListener.java | 228 ++++++++ .../CategoryEditMaterialMenu.java | 110 ++++ .../CategoryEditMaterialMenuListener.java | 106 ++++ .../category/categorymenu/CategoryDAO.java | 263 +++++++++ .../category/categorymenu/CategoryMenu.java | 429 ++++++++++++++ .../categorymenu/CategoryMenuListener.java | 158 +++++ .../categoryoptions/CategoryOptionsMenu.java | 236 ++++++++ .../CategoryOptionsMenuHolder.java | 25 + .../CategoryOptionsMenuListener.java | 242 ++++++++ .../copytocategory/CopyToCategoryMenu.java | 196 +++++++ .../CopyToCategoryMenuHolder.java | 41 ++ .../CopyToCategoryMenuListener.java | 143 +++++ .../movetocategory/MoveToCategoryMenu.java | 265 +++++++++ .../MoveToCategoryMenuHolder.java | 29 + .../MoveToCategoryMenuListener.java | 108 ++++ .../ChestAutoProcessingTask.java | 91 +++ .../rswarehouse/commands/RSPluginCommand.java | 134 +++++ .../rswarehouse/commands/RSTabCompleter.java | 48 ++ .../rswarehouse/commands/ShopCommand.java | 36 ++ .../rswarehouse/config/ConfigManager.java | 96 ++++ .../rswarehouse/constants/RSConstants.java | 74 +++ .../rswarehouse/constants/RSKeys.java | 48 ++ .../rswarehouse/conversion/ConvertMenu.java | 67 +++ .../conversion/ConvertMenuListener.java | 293 ++++++++++ .../rswarehouse/database/DatabaseManager.java | 97 ++++ .../database/DatabaseTableCreator.java | 197 +++++++ .../rswarehouse/database/DatabaseUpdater.java | 102 ++++ .../rswarehouse/deposit/DepositInventory.java | 25 + .../deposit/DepositInventoryHolder.java | 12 + .../deposit/WarehouseChestProcessor.java | 349 +++++++++++ .../deposit/WarehouseCloseListener.java | 103 ++++ .../rswarehouse/deposit/dao/ChestDAO.java | 207 +++++++ .../deposit/dao/VerifyIsChestDAO.java | 73 +++ .../deposit/dao/WarehouseChestDAO.java | 313 ++++++++++ .../com/rsscripting/rswarehouse/discovery/0 | 0 .../discovery/discoverydao/DiscoveryDAO.java | 70 +++ .../inventory/InventoryQuantityDAO.java | 177 ++++++ .../inventorydao/InventoryCreationDAO.java | 128 +++++ .../inventorydao/InventoryLookupDAO.java | 85 +++ .../rswarehouse/item/ItemsBuilder.java | 365 ++++++++++++ .../rswarehouse/item/ItemsMenu.java | 354 ++++++++++++ .../rswarehouse/item/ItemsMenuListener.java | 177 ++++++ .../rswarehouse/item/ItemsPagination.java | 308 ++++++++++ .../item/TransactionAmountButtonHandler.java | 58 ++ .../item/TransactionAmountMenu.java | 225 ++++++++ .../item/TransactionAmountMenuListener.java | 216 +++++++ .../item/TransactionCenterItemBuilder.java | 96 ++++ .../item/TransactionConfirmHandler.java | 74 +++ .../rswarehouse/item/TransactionUtils.java | 152 +++++ .../item/TransactionVariantBuilder.java | 232 ++++++++ .../item/TransactionVariantHandler.java | 110 ++++ .../item/TransactionWithdrawHandler.java | 83 +++ .../deleteitem/DeleteConfirmationMenu.java | 98 ++++ .../DeleteConfirmationMenuHolder.java | 29 + .../DeleteConfirmationMenuListener.java | 173 ++++++ .../rswarehouse/item/itemdao/ItemDAO.java | 370 ++++++++++++ .../item/options/ItemOptionsMenu.java | 253 ++++++++ .../item/options/ItemOptionsMenuHolder.java | 29 + .../item/options/ItemOptionsMenuListener.java | 321 +++++++++++ .../rswarehouse/main/MainMenu.java | 98 ++++ .../rswarehouse/main/MainMenuListener.java | 178 ++++++ .../rswarehouse/menuholder/RSMenuHolder.java | 57 ++ .../rswarehouse/model/DamagedVariant.java | 5 + .../rswarehouse/model/EnchantedVariant.java | 11 + .../model/PartiallyFilledVariant.java | 12 + .../rswarehouse/model/WarehouseCategory.java | 15 + .../rswarehouse/model/WarehouseItem.java | 30 + .../model/WarehouseSubCategory.java | 15 + .../navigation/NavigationHistory.java | 71 +++ .../navigation/NavigationLocation.java | 90 +++ .../navigation/NavigationManager.java | 150 +++++ .../navigation/NavigationType.java | 9 + .../RSUpdateNotificationListener.java | 53 ++ .../WarehouseChestBreakListener.java | 78 +++ .../com/rsscripting/rswarehouse/placement/0 | 0 .../placementdao/ItemPlacementDAO.java | 335 +++++++++++ .../com/rsscripting/rswarehouse/references/0 | 0 .../referencesdao/WarehouseReferenceDAO.java | 232 ++++++++ .../registration/ListenerRegistrar.java | 26 + .../registration/ListenerRegistration.java | 279 +++++++++ .../session/CategoryCreationSession.java | 160 ++++++ .../rswarehouse/session/GuiSession.java | 504 ++++++++++++++++ .../session/GuiSessionManager.java | 35 ++ .../session/ItemActionSessionManager.java | 49 ++ .../session/ItemBrowserSession.java | 56 ++ .../session/SubCategoryCreationSession.java | 143 +++++ .../session/TransactionSession.java | 82 +++ .../rswarehouse/session/VariantType.java | 10 + .../CopyToSubCategoryMenu.java | 196 +++++++ .../CopyToSubCategoryMenuHolder.java | 41 ++ .../CopyToSubCategoryMenuListener.java | 180 ++++++ .../items/SubCategoryDisplayNameMenu.java | 86 +++ .../SubCategoryDisplayNameMenuListener.java | 151 +++++ .../items/SubCategoryEditDisplayNameMenu.java | 93 +++ ...ubCategoryEditDisplayNameMenuListener.java | 143 +++++ .../SubCategoryEditLoreChatListener.java | 144 +++++ .../items/SubCategoryEditLoreMenu.java | 173 ++++++ .../SubCategoryEditLoreMenuListener.java | 230 ++++++++ .../items/SubCategoryInternalNameMenu.java | 87 +++ .../SubCategoryInternalNameMenuListener.java | 135 +++++ .../items/SubCategoryLoreChatListener.java | 136 +++++ .../items/SubCategoryLoreMenu.java | 144 +++++ .../items/SubCategoryLoreMenuListener.java | 250 ++++++++ .../MoveToSubCategoryMenu.java | 196 +++++++ .../MoveToSubCategoryMenuHolder.java | 41 ++ .../MoveToSubCategoryMenuListener.java | 180 ++++++ .../subcategorydao/SubCategoryDAO.java | 323 +++++++++++ .../updatechecker/GitHubUpdateChecker.java | 186 ++++++ .../rswarehouse/utils/ItemStackUtils.java | 543 ++++++++++++++++++ .../utils/MenuAutoCenterAndPagenation.java | 80 +++ .../rswarehouse/utils/RSMenuUtils.java | 165 ++++++ .../rswarehouse/utils/RSMessageUtils.java | 170 ++++++ .../rswarehouse/utils/VersionUtils.java | 20 + .../com/rsscripting/rswarehouse/variants/0 | 0 .../variants/dao/DamagedVariantsDAO.java | 432 ++++++++++++++ .../variants/dao/EnchantedVariantsDAO.java | 393 +++++++++++++ .../dao/PartiallyFilledVariantsDAO.java | 394 +++++++++++++ .../variantsdamaged/DamagedVariantsMenu.java | 179 ++++++ .../DamagedVariantsMenuListener.java | 149 +++++ .../DamagedVariantsTransactionMenu.java | 321 +++++++++++ ...amagedVariantsTransactionMenuListener.java | 433 ++++++++++++++ .../EnchantedVariantsMenu.java | 147 +++++ .../EnchantedVariantsMenuListener.java | 151 +++++ .../EnchantedVariantsTransactionMenu.java | 321 +++++++++++ ...hantedVariantsTransactionMenuListener.java | 433 ++++++++++++++ .../PartiallyFilledVariantsMenu.java | 147 +++++ .../PartiallyFilledVariantsMenuListener.java | 150 +++++ ...artiallyFilledVariantsTransactionMenu.java | 321 +++++++++++ ...FilledVariantsTransactionMenuListener.java | 433 ++++++++++++++ src/main/resources/config.yml | 43 ++ src/main/resources/database.db | Bin 0 -> 2097152 bytes src/main/resources/plugin.yml | 25 + 314 files changed, 27448 insertions(+) create mode 100644 .git-pre-1.0/COMMIT_EDITMSG create mode 100644 .git-pre-1.0/HEAD create mode 100644 .git-pre-1.0/config create mode 100644 .git-pre-1.0/description create mode 100644 .git-pre-1.0/hooks/applypatch-msg.sample create mode 100644 .git-pre-1.0/hooks/commit-msg.sample create mode 100644 .git-pre-1.0/hooks/fsmonitor-watchman.sample create mode 100644 .git-pre-1.0/hooks/post-update.sample create mode 100644 .git-pre-1.0/hooks/pre-applypatch.sample create mode 100644 .git-pre-1.0/hooks/pre-commit.sample create mode 100644 .git-pre-1.0/hooks/pre-merge-commit.sample create mode 100644 .git-pre-1.0/hooks/pre-push.sample create mode 100644 .git-pre-1.0/hooks/pre-rebase.sample create mode 100644 .git-pre-1.0/hooks/pre-receive.sample create mode 100644 .git-pre-1.0/hooks/prepare-commit-msg.sample create mode 100644 .git-pre-1.0/hooks/push-to-checkout.sample create mode 100644 .git-pre-1.0/hooks/sendemail-validate.sample create mode 100644 .git-pre-1.0/hooks/update.sample create mode 100644 .git-pre-1.0/index create mode 100644 .git-pre-1.0/info/exclude create mode 100644 .git-pre-1.0/info/refs create mode 100644 .git-pre-1.0/logs/HEAD create mode 100644 .git-pre-1.0/logs/refs/heads/main create mode 100644 .git-pre-1.0/objects/00/3f9724e48adcf06b0ab65d6f41864743d18ba0 create mode 100644 .git-pre-1.0/objects/01/a36d563b889e12a73ea3ba9b61298325c5e6c7 create mode 100644 .git-pre-1.0/objects/05/caa9970a260d34ace5ec3accb75f35b9e2b526 create mode 100644 .git-pre-1.0/objects/06/d04659cdf7f38ab3fecafc1d918475fbb64d72 create mode 100644 .git-pre-1.0/objects/07/365705b95af7b82539f4beee71e137bdd3dc00 create mode 100644 .git-pre-1.0/objects/0f/b041ab9a3e50c32e214c4e5eccbca16bbc5c45 create mode 100644 .git-pre-1.0/objects/10/0c4bc4d635022ca45e587d7ccb4c6793faee46 create mode 100644 .git-pre-1.0/objects/12/3ade710a80790a98e3b809dc582d73b2dc4294 create mode 100644 .git-pre-1.0/objects/13/ce049bd7dc0cebc74f6b3481ae591e4de0ceca create mode 100644 .git-pre-1.0/objects/14/d95a10aa13043845065aa1640e5bd73106e07b create mode 100644 .git-pre-1.0/objects/15/3dbfe75bf61a8fbbabc19541e62f15cf3b5f68 create mode 100644 .git-pre-1.0/objects/19/d1108c3ab541278310e83d598b836546a0ed3d create mode 100644 .git-pre-1.0/objects/1a/95bf9648a636d911e37882b2d3111863e1fb92 create mode 100644 .git-pre-1.0/objects/1e/a03c378b1e613898f18cebca08ffb8c57363c6 create mode 100644 .git-pre-1.0/objects/2b/43b549e4ef368f27b23e2227c2b276b94edfe3 create mode 100644 .git-pre-1.0/objects/2c/5edf8a15831ae177af338986af362acc0dc590 create mode 100644 .git-pre-1.0/objects/2d/0915bcf166d79de4cffbc789b8611c377d21bc create mode 100644 .git-pre-1.0/objects/2e/a1a4539f2fba8442f564adbe7dee01c0fb725e create mode 100644 .git-pre-1.0/objects/38/65bd8e0b9c5bbbd4abc33898b0a71f7a0628bd create mode 100644 .git-pre-1.0/objects/3a/f202a42b5d541830d39daf6b5e3f7e4e6334dd create mode 100644 .git-pre-1.0/objects/3b/f9143247bb4778ba384e2b474ce0b0e2823cfe create mode 100644 .git-pre-1.0/objects/3d/15d25103d8da32a89a0747c0bb3778654758c0 create mode 100644 .git-pre-1.0/objects/3d/3e6cc0841729a20d7ccd9a741971e2e08cadbd create mode 100644 .git-pre-1.0/objects/3d/eea135869843563fdb1165aceba5c119567ca1 create mode 100644 .git-pre-1.0/objects/3f/04136ec6f8147f5fc97b89d555ab154a0fa0c3 create mode 100644 .git-pre-1.0/objects/3f/4fab88a50a49d64299d9aa598332944d1a9203 create mode 100644 .git-pre-1.0/objects/40/f09d8f822ebc96117541c56c6d1888f7b925de create mode 100644 .git-pre-1.0/objects/4c/0c90a62ada915a4e7668c88b95fcc3725dfad7 create mode 100644 .git-pre-1.0/objects/4c/e4417b9d46e7ffb2bf1a47964d27675f383d2b create mode 100644 .git-pre-1.0/objects/4d/31deee871a5835aa028f17e66d28b12e0005f7 create mode 100644 .git-pre-1.0/objects/4e/3aa7ae6ef142b35e0bce17f7c5950c1bb98b14 create mode 100644 .git-pre-1.0/objects/4e/813b475a536557dfb88e26faeaaa90c228e84e create mode 100644 .git-pre-1.0/objects/55/a57bd9f687ffd29130601da7c851f6b896867d create mode 100644 .git-pre-1.0/objects/56/e00e09f253d17caa894365f14d117072d84bce create mode 100644 .git-pre-1.0/objects/57/1820270693f059df21f8ca515f8a47143d1020 create mode 100644 .git-pre-1.0/objects/58/64829a3132fd41a16701086b5c4cccbfc985b9 create mode 100644 .git-pre-1.0/objects/58/c04451c6e7ab13c6c841784976fa314718da7c create mode 100644 .git-pre-1.0/objects/5c/5363c25682a6dc8a19262fc63d4b1f123e318b create mode 100644 .git-pre-1.0/objects/5e/58df6db7c6a757a4f4c99c7cc952df24b6414e create mode 100644 .git-pre-1.0/objects/61/24496e14f549282ebca2756dfdc87170fb9b6b create mode 100644 .git-pre-1.0/objects/62/cf7d13a08c282752ec26c3b2d935d58212242a create mode 100644 .git-pre-1.0/objects/63/7a511eb808f4d523ee7bfb829c315c38f3b39d create mode 100644 .git-pre-1.0/objects/64/e681ec731bae20d090e1800df608dea71e2551 create mode 100644 .git-pre-1.0/objects/66/ac0fbe65eac74c80b16ba8d9b91425f114b011 create mode 100644 .git-pre-1.0/objects/6b/57394b6352aaa4db4266a6b3c386148486894d create mode 100644 .git-pre-1.0/objects/6b/ca02b5b4ec05078120aefde5301be5398f1c00 create mode 100644 .git-pre-1.0/objects/77/667f90a21eb33e2cc6f90b0c79b084fc2479de create mode 100644 .git-pre-1.0/objects/78/42c8b4cb8d0742017a95e1d569ce805b66d6e9 create mode 100644 .git-pre-1.0/objects/7d/3a406e6ce451654b545e18d83b5d5cd49dd4d2 create mode 100644 .git-pre-1.0/objects/87/caea6138c6ef56e6a3fea0286f75f29617d288 create mode 100644 .git-pre-1.0/objects/89/ebfcd0801d44aef767f5cea22d49c6669e6a04 create mode 100644 .git-pre-1.0/objects/8c/74e90f09a6d6639fd5d841b2d1a832e901b98a create mode 100644 .git-pre-1.0/objects/8c/fcfd13ef32648f6de4ba6db9a1d05435c4ea17 create mode 100644 .git-pre-1.0/objects/8d/8f6e0905d4e86622b8709e4a852d0a4b97822b create mode 100644 .git-pre-1.0/objects/90/02f9d05dd907e3e4c73ba86d3a62de8ff19707 create mode 100644 .git-pre-1.0/objects/95/1db2564705080a8d51749ab7ca681a6c5fe37e create mode 100644 .git-pre-1.0/objects/96/5a6e24d8a047502018a7dfce1b5856e3b613b7 create mode 100644 .git-pre-1.0/objects/96/d4025f373135f533594f0b3d187db6bc6c4736 create mode 100644 .git-pre-1.0/objects/98/389e10e02620a82049013138909cb27e6d2dde create mode 100644 .git-pre-1.0/objects/9b/6e4cf0d7cc95476f9dda06ce677868a117192f create mode 100644 .git-pre-1.0/objects/9b/a60f2cbd6a72640af0bac05a494c9d7da37733 create mode 100644 .git-pre-1.0/objects/9f/30a6045b9268c4c231b8c4363f5e7dcafea294 create mode 100644 .git-pre-1.0/objects/a2/3ed12ecbf59c4aaca39eeb99c27e9953b4ee77 create mode 100644 .git-pre-1.0/objects/a3/0e5a4b42d7e5d4ce60548fa59d33616d527201 create mode 100644 .git-pre-1.0/objects/a3/227846e5d224078a76d9197a0a34cb44c455f4 create mode 100644 .git-pre-1.0/objects/a4/5c1cba928608dac43b552d67c421b79ccc3837 create mode 100644 .git-pre-1.0/objects/b0/d865f612861260ba30daf6c9c67f5499efb12b create mode 100644 .git-pre-1.0/objects/b1/000215825dc6c9bb3a0a6a5d986fe653eb2da0 create mode 100644 .git-pre-1.0/objects/b4/1f03b15a67b056cd45f3f9f82f6cdff46f9e04 create mode 100644 .git-pre-1.0/objects/b5/7489f9d18302c2317d0a66c825f4b607e34634 create mode 100644 .git-pre-1.0/objects/b8/1e66f6edf51af69ba071ad12be19b3708421bd create mode 100644 .git-pre-1.0/objects/bd/80165fccd781bd1f1cf58b51ce0ecb228396cf create mode 100644 .git-pre-1.0/objects/be/6f008c8de5e4a2c05c1138853ba86f8a8bbeb2 create mode 100644 .git-pre-1.0/objects/bf/8553f0fa63816bb36aad321889d9aa18113045 create mode 100644 .git-pre-1.0/objects/c0/91f0b5dff117b60c98a5a6bc1def04713753bc create mode 100644 .git-pre-1.0/objects/c1/9ce9ce854396c1daed26e5fdf5066f945d3c6a create mode 100644 .git-pre-1.0/objects/c3/d02bf241629e830cb5067fab2ec5b6202234e6 create mode 100644 .git-pre-1.0/objects/c5/2c001ecff0ab68fa0c88e0006b343fdf9767c7 create mode 100644 .git-pre-1.0/objects/c6/032fbe50b11cb7dd78b00c28b34d81041006a5 create mode 100644 .git-pre-1.0/objects/cd/7ab01c69c5ff00d52b667cd47760b61408d307 create mode 100644 .git-pre-1.0/objects/cf/644a4ccd8919db1e93d58b9cd94fa122cc0aab create mode 100644 .git-pre-1.0/objects/d1/581b939b6938a23920a5174063a9d26ed3482d create mode 100644 .git-pre-1.0/objects/db/bffc4131e908cf5c674803cba45031195aef41 create mode 100644 .git-pre-1.0/objects/e0/249262d6f4ccdb5e61b031b3a662527b9876c9 create mode 100644 .git-pre-1.0/objects/e0/e5d1cc99ec34272576aeea559fe187d6b8ba93 create mode 100644 .git-pre-1.0/objects/e2/0980d6d4ddb800eee347122f6315eb3889d6db create mode 100644 .git-pre-1.0/objects/e7/81d97a54ae37d929e3204da59d9671c68223d1 create mode 100644 .git-pre-1.0/objects/ea/9c5db9d386b871a83595de63c78767fa9927b9 create mode 100644 .git-pre-1.0/objects/ec/143d5ae39c2032a7b66d807f37448f0de53602 create mode 100644 .git-pre-1.0/objects/f1/b5082328aacc6af4f8026388475acaad3c7203 create mode 100644 .git-pre-1.0/objects/f2/cebb98ef105f9ea6f64437342283aa345ca5ca create mode 100644 .git-pre-1.0/objects/f3/7f1a831caf4571f7f50161e7e720524e5b9e6b create mode 100644 .git-pre-1.0/objects/f3/ffb87e0ed77052fa98adfb1c274cd33cb92dc6 create mode 100644 .git-pre-1.0/objects/f6/3e7571560668e84211b8f8e417959c0f4cbe0c create mode 100644 .git-pre-1.0/objects/fa/a21502f476a2e25a6e52aab982692b60f614ce create mode 100644 .git-pre-1.0/objects/fd/d749167f6b4ddba420531c63540498a06f88be create mode 100644 .git-pre-1.0/objects/fe/6e623bd6886270b5cd485c2be62beab4e1d86a create mode 100644 .git-pre-1.0/objects/info/packs create mode 100644 .git-pre-1.0/objects/pack/multi-pack-index create mode 100644 .git-pre-1.0/objects/pack/pack-091227e431babe2a5e47fb5d2d6e3b5947591f33.idx create mode 100644 .git-pre-1.0/objects/pack/pack-091227e431babe2a5e47fb5d2d6e3b5947591f33.mtimes create mode 100644 .git-pre-1.0/objects/pack/pack-091227e431babe2a5e47fb5d2d6e3b5947591f33.pack create mode 100644 .git-pre-1.0/objects/pack/pack-091227e431babe2a5e47fb5d2d6e3b5947591f33.rev create mode 100644 .git-pre-1.0/objects/pack/pack-c635a9249202c299756cc28e67675855546a7a4d.idx create mode 100644 .git-pre-1.0/objects/pack/pack-c635a9249202c299756cc28e67675855546a7a4d.pack create mode 100644 .git-pre-1.0/objects/pack/pack-c635a9249202c299756cc28e67675855546a7a4d.rev create mode 100644 .git-pre-1.0/refs/heads/main create mode 100644 .gitignore create mode 100644 .idea/.gitignore create mode 100644 .idea/encodings.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/vcs.xml create mode 100644 pom.xml create mode 100644 src/main/java/com/rsscripting/rswarehouse/RSWarehouse.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/AdminMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/AdminMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/admindao/CategoryPlacementDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/admindao/CreateCategoryDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/admindao/CreateSubCategoryDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/admindao/PurgeVariantsDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/admindao/UpdateCategoryDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/admindao/WarehouseStatisticsDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryEditSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryEditSessionManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryOptionsMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryPageSlotSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryPageSlotSessionManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/PageSlotAssignmentSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/PageSlotAssignmentSessionManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryCreationSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryCreationSessionManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryEditSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryEditSessionManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategoryPageNumberMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategoryPageNumberMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategorySlotNumberMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategorySlotNumberMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/PageNumberMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/PageNumberMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/SlotNumberMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/SlotNumberMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositPickupListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/autodeposit/autodepositdao/AutoDepositDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryDisplayNameMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryDisplayNameMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreChatListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryMaterialPickerMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryMaterialPickerMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryNameMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryNameMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditDisplayNameMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditDisplayNameMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenuChatListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditMaterialMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditMaterialMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenuHolder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenuHolder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenuHolder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/chestautoprocess/ChestAutoProcessingTask.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/commands/RSPluginCommand.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/commands/RSTabCompleter.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/commands/ShopCommand.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/config/ConfigManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/constants/RSConstants.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/constants/RSKeys.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/conversion/ConvertMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/conversion/ConvertMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/database/DatabaseManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/database/DatabaseTableCreator.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/database/DatabaseUpdater.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/deposit/DepositInventory.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/deposit/DepositInventoryHolder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/deposit/WarehouseChestProcessor.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/deposit/WarehouseCloseListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/deposit/dao/ChestDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/deposit/dao/VerifyIsChestDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/deposit/dao/WarehouseChestDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/discovery/0 create mode 100644 src/main/java/com/rsscripting/rswarehouse/discovery/discoverydao/DiscoveryDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/inventory/InventoryQuantityDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/inventory/inventorydao/InventoryCreationDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/inventory/inventorydao/InventoryLookupDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/ItemsBuilder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/ItemsMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/ItemsMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/ItemsPagination.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountButtonHandler.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/TransactionCenterItemBuilder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/TransactionConfirmHandler.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/TransactionUtils.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/TransactionVariantBuilder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/TransactionVariantHandler.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/TransactionWithdrawHandler.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenuHolder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/itemdao/ItemDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenuHolder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/main/MainMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/main/MainMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/menuholder/RSMenuHolder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/model/DamagedVariant.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/model/EnchantedVariant.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/model/PartiallyFilledVariant.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/model/WarehouseCategory.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/model/WarehouseItem.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/model/WarehouseSubCategory.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/navigation/NavigationHistory.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/navigation/NavigationLocation.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/navigation/NavigationManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/navigation/NavigationType.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/otherlisteners/RSUpdateNotificationListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/otherlisteners/WarehouseChestBreakListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/placement/0 create mode 100644 src/main/java/com/rsscripting/rswarehouse/placement/placementdao/ItemPlacementDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/references/0 create mode 100644 src/main/java/com/rsscripting/rswarehouse/references/referencesdao/WarehouseReferenceDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/registration/ListenerRegistrar.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/registration/ListenerRegistration.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/session/CategoryCreationSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/session/GuiSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/session/GuiSessionManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/session/ItemActionSessionManager.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/session/ItemBrowserSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/session/SubCategoryCreationSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/session/TransactionSession.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/session/VariantType.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenuHolder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryDisplayNameMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryDisplayNameMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditDisplayNameMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditDisplayNameMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreChatListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryInternalNameMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryInternalNameMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreChatListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenuHolder.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/subcategory/subcategorydao/SubCategoryDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/updatechecker/GitHubUpdateChecker.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/utils/ItemStackUtils.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/utils/MenuAutoCenterAndPagenation.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/utils/RSMenuUtils.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/utils/RSMessageUtils.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/utils/VersionUtils.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variants/0 create mode 100644 src/main/java/com/rsscripting/rswarehouse/variants/dao/DamagedVariantsDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variants/dao/EnchantedVariantsDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variants/dao/PartiallyFilledVariantsDAO.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsTransactionMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsTransactionMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsTransactionMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsTransactionMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsMenuListener.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsTransactionMenu.java create mode 100644 src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsTransactionMenuListener.java create mode 100644 src/main/resources/config.yml create mode 100644 src/main/resources/database.db create mode 100644 src/main/resources/plugin.yml diff --git a/.git-pre-1.0/COMMIT_EDITMSG b/.git-pre-1.0/COMMIT_EDITMSG new file mode 100644 index 0000000..cf5c8bf --- /dev/null +++ b/.git-pre-1.0/COMMIT_EDITMSG @@ -0,0 +1,4 @@ +1.0.0 + +Fixed: +Issue with items showing in 2 spots when not assigned a spot. diff --git a/.git-pre-1.0/HEAD b/.git-pre-1.0/HEAD new file mode 100644 index 0000000..b870d82 --- /dev/null +++ b/.git-pre-1.0/HEAD @@ -0,0 +1 @@ +ref: refs/heads/main diff --git a/.git-pre-1.0/config b/.git-pre-1.0/config new file mode 100644 index 0000000..14107bf --- /dev/null +++ b/.git-pre-1.0/config @@ -0,0 +1,10 @@ +[core] + repositoryformatversion = 0 + filemode = false + bare = false + logallrefupdates = true + symlinks = false + ignorecase = true +[remote "origin"] + url = http://192.168.1.58:30008/truenas_admin/RS-Warehouse.git + fetch = +refs/heads/*:refs/remotes/origin/* diff --git a/.git-pre-1.0/description b/.git-pre-1.0/description new file mode 100644 index 0000000..498b267 --- /dev/null +++ b/.git-pre-1.0/description @@ -0,0 +1 @@ +Unnamed repository; edit this file 'description' to name the repository. diff --git a/.git-pre-1.0/hooks/applypatch-msg.sample b/.git-pre-1.0/hooks/applypatch-msg.sample new file mode 100644 index 0000000..a5d7b84 --- /dev/null +++ b/.git-pre-1.0/hooks/applypatch-msg.sample @@ -0,0 +1,15 @@ +#!/bin/sh +# +# An example hook script to check the commit log message taken by +# applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. The hook is +# allowed to edit the commit message file. +# +# To enable this hook, rename this file to "applypatch-msg". + +. git-sh-setup +commitmsg="$(git rev-parse --git-path hooks/commit-msg)" +test -x "$commitmsg" && exec "$commitmsg" ${1+"$@"} +: diff --git a/.git-pre-1.0/hooks/commit-msg.sample b/.git-pre-1.0/hooks/commit-msg.sample new file mode 100644 index 0000000..f7458ef --- /dev/null +++ b/.git-pre-1.0/hooks/commit-msg.sample @@ -0,0 +1,74 @@ +#!/bin/sh +# +# An example hook script to check the commit log message. +# Called by "git commit" with one argument, the name of the file +# that has the commit message. The hook should exit with non-zero +# status after issuing an appropriate message if it wants to stop the +# commit. The hook is allowed to edit the commit message file. +# +# To enable this hook, rename this file to "commit-msg". + +# Uncomment the below to add a Signed-off-by line to the message. +# Doing this in a hook is a bad idea in general, but the prepare-commit-msg +# hook is more suited to it. +# +# SOB=$(git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# grep -qs "^$SOB" "$1" || echo "$SOB" >> "$1" + +# This example catches duplicate Signed-off-by lines and messages that +# would confuse 'git am'. + +ret=0 + +test "" = "$(grep '^Signed-off-by: ' "$1" | + sort | uniq -c | sed -e '/^[ ]*1[ ]/d')" || { + echo >&2 Duplicate Signed-off-by lines. + ret=1 +} + +comment_re="$( + { + git config --get-regexp "^core\.comment(char|string)\$" || + echo '#' + } | sed -n -e ' + ${ + s/^[^ ]* // + s|[][*./\]|\\&|g + s/^auto$/[#;@!$%^&|:]/ + p + }' +)" +scissors_line="^${comment_re} -\{8,\} >8 -\{8,\}\$" +comment_line="^${comment_re}.*" +blank_line='^[ ]*$' +# Disallow lines starting with "diff -" or "Index: " in the body of the +# message. Stop looking if we see a scissors line. +line="$(sed -n -e " + # Skip comments and blank lines at the start of the file. + /${scissors_line}/q + /${comment_line}/d + /${blank_line}/d + # The first paragraph will become the subject header so + # does not need to be checked. + : subject + n + /${scissors_line}/q + /${blank_line}/!b subject + # Check the body of the message for problematic + # prefixes. + : body + n + /${scissors_line}/q + /${comment_line}/b body + /^diff -/{p;q;} + /^Index: /{p;q;} + b body + " "$1")" +if test -n "$line" +then + echo >&2 "Message contains a diff that will confuse 'git am'." + echo >&2 "To fix this indent the diff." + ret=1 +fi + +exit $ret diff --git a/.git-pre-1.0/hooks/fsmonitor-watchman.sample b/.git-pre-1.0/hooks/fsmonitor-watchman.sample new file mode 100644 index 0000000..429e0a5 --- /dev/null +++ b/.git-pre-1.0/hooks/fsmonitor-watchman.sample @@ -0,0 +1,168 @@ +#!/usr/bin/perl + +use strict; +use warnings; +use IPC::Open2; + +# An example hook script to integrate Watchman +# (https://facebook.github.io/watchman/) with git to speed up detecting +# new and modified files. +# +# The hook is passed a version (currently 2) and last update token +# formatted as a string and outputs to stdout a new update token and +# all files that have been modified since the update token. Paths must +# be relative to the root of the working tree and separated by a single NUL. +# +# To enable this hook, rename this file to "query-watchman" and set +# 'git config core.fsmonitor .git/hooks/query-watchman' +# +my ($version, $last_update_token) = @ARGV; + +# Uncomment for debugging +# print STDERR "$0 $version $last_update_token\n"; + +# Check the hook interface version +if ($version ne 2) { + die "Unsupported query-fsmonitor hook version '$version'.\n" . + "Falling back to scanning...\n"; +} + +my $git_work_tree = get_working_dir(); + +my $json_pkg; +eval { + require JSON::XS; + $json_pkg = "JSON::XS"; + 1; +} or do { + require JSON::PP; + $json_pkg = "JSON::PP"; +}; + +launch_watchman(); + +sub launch_watchman { + my $o = watchman_query(); + if (is_work_tree_watched($o)) { + output_result($o->{clock}, @{$o->{files}}); + } +} + +sub output_result { + my ($clockid, @files) = @_; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # binmode $fh, ":utf8"; + # print $fh "$clockid\n@files\n"; + # close $fh; + + binmode STDOUT, ":utf8"; + print $clockid; + print "\0"; + local $, = "\0"; + print @files; +} + +sub watchman_clock { + my $response = qx/watchman clock "$git_work_tree"/; + die "Failed to get clock id on '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + + return $json_pkg->new->utf8->decode($response); +} + +sub watchman_query { + my $pid = open2(\*CHLD_OUT, \*CHLD_IN, 'watchman -j --no-pretty') + or die "open2() failed: $!\n" . + "Falling back to scanning...\n"; + + # In the query expression below we're asking for names of files that + # changed since $last_update_token but not from the .git folder. + # + # To accomplish this, we're using the "since" generator to use the + # recency index to select candidate nodes and "fields" to limit the + # output to file names only. Then we're using the "expression" term to + # further constrain the results. + my $last_update_line = ""; + if (substr($last_update_token, 0, 1) eq "c") { + $last_update_token = "\"$last_update_token\""; + $last_update_line = qq[\n"since": $last_update_token,]; + } + my $query = <<" END"; + ["query", "$git_work_tree", {$last_update_line + "fields": ["name"], + "expression": ["not", ["dirname", ".git"]] + }] + END + + # Uncomment for debugging the watchman query + # open (my $fh, ">", ".git/watchman-query.json"); + # print $fh $query; + # close $fh; + + print CHLD_IN $query; + close CHLD_IN; + my $response = do {local $/; }; + + # Uncomment for debugging the watch response + # open ($fh, ">", ".git/watchman-response.json"); + # print $fh $response; + # close $fh; + + die "Watchman: command returned no output.\n" . + "Falling back to scanning...\n" if $response eq ""; + die "Watchman: command returned invalid output: $response\n" . + "Falling back to scanning...\n" unless $response =~ /^\{/; + + return $json_pkg->new->utf8->decode($response); +} + +sub is_work_tree_watched { + my ($output) = @_; + my $error = $output->{error}; + if ($error and $error =~ m/unable to resolve root .* directory (.*) is not watched/) { + my $response = qx/watchman watch "$git_work_tree"/; + die "Failed to make watchman watch '$git_work_tree'.\n" . + "Falling back to scanning...\n" if $? != 0; + $output = $json_pkg->new->utf8->decode($response); + $error = $output->{error}; + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + # Uncomment for debugging watchman output + # open (my $fh, ">", ".git/watchman-output.out"); + # close $fh; + + # Watchman will always return all files on the first query so + # return the fast "everything is dirty" flag to git and do the + # Watchman query just to get it over with now so we won't pay + # the cost in git to look up each individual file. + my $o = watchman_clock(); + $error = $o->{error}; + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + output_result($o->{clock}, ("/")); + return 0; + } + + die "Watchman: $error.\n" . + "Falling back to scanning...\n" if $error; + + return 1; +} + +sub get_working_dir { + my $working_dir; + if ($^O =~ 'msys' || $^O =~ 'cygwin') { + $working_dir = Win32::GetCwd(); + $working_dir =~ tr/\\/\//; + } else { + require Cwd; + $working_dir = Cwd::cwd(); + } + + return $working_dir; +} diff --git a/.git-pre-1.0/hooks/post-update.sample b/.git-pre-1.0/hooks/post-update.sample new file mode 100644 index 0000000..ec17ec1 --- /dev/null +++ b/.git-pre-1.0/hooks/post-update.sample @@ -0,0 +1,8 @@ +#!/bin/sh +# +# An example hook script to prepare a packed repository for use over +# dumb transports. +# +# To enable this hook, rename this file to "post-update". + +exec git update-server-info diff --git a/.git-pre-1.0/hooks/pre-applypatch.sample b/.git-pre-1.0/hooks/pre-applypatch.sample new file mode 100644 index 0000000..4142082 --- /dev/null +++ b/.git-pre-1.0/hooks/pre-applypatch.sample @@ -0,0 +1,14 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed +# by applypatch from an e-mail message. +# +# The hook should exit with non-zero status after issuing an +# appropriate message if it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-applypatch". + +. git-sh-setup +precommit="$(git rev-parse --git-path hooks/pre-commit)" +test -x "$precommit" && exec "$precommit" ${1+"$@"} +: diff --git a/.git-pre-1.0/hooks/pre-commit.sample b/.git-pre-1.0/hooks/pre-commit.sample new file mode 100644 index 0000000..29ed5ee --- /dev/null +++ b/.git-pre-1.0/hooks/pre-commit.sample @@ -0,0 +1,49 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git commit" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message if +# it wants to stop the commit. +# +# To enable this hook, rename this file to "pre-commit". + +if git rev-parse --verify HEAD >/dev/null 2>&1 +then + against=HEAD +else + # Initial commit: diff against an empty tree object + against=$(git hash-object -t tree /dev/null) +fi + +# If you want to allow non-ASCII filenames set this variable to true. +allownonascii=$(git config --type=bool hooks.allownonascii) + +# Redirect output to stderr. +exec 1>&2 + +# Cross platform projects tend to avoid non-ASCII filenames; prevent +# them from being added to the repository. We exploit the fact that the +# printable range starts at the space character and ends with tilde. +if [ "$allownonascii" != "true" ] && + # Note that the use of brackets around a tr range is ok here, (it's + # even required, for portability to Solaris 10's /usr/bin/tr), since + # the square bracket bytes happen to fall in the designated range. + test $(git diff-index --cached --name-only --diff-filter=A -z $against | + LC_ALL=C tr -d '[ -~]\0' | wc -c) != 0 +then + cat <<\EOF +Error: Attempt to add a non-ASCII file name. + +This can cause problems if you want to work with people on other platforms. + +To be portable it is advisable to rename the file. + +If you know what you are doing you can disable this check using: + + git config hooks.allownonascii true +EOF + exit 1 +fi + +# If there are whitespace errors, print the offending file names and fail. +exec git diff-index --check --cached $against -- diff --git a/.git-pre-1.0/hooks/pre-merge-commit.sample b/.git-pre-1.0/hooks/pre-merge-commit.sample new file mode 100644 index 0000000..399eab1 --- /dev/null +++ b/.git-pre-1.0/hooks/pre-merge-commit.sample @@ -0,0 +1,13 @@ +#!/bin/sh +# +# An example hook script to verify what is about to be committed. +# Called by "git merge" with no arguments. The hook should +# exit with non-zero status after issuing an appropriate message to +# stderr if it wants to stop the merge commit. +# +# To enable this hook, rename this file to "pre-merge-commit". + +. git-sh-setup +test -x "$GIT_DIR/hooks/pre-commit" && + exec "$GIT_DIR/hooks/pre-commit" +: diff --git a/.git-pre-1.0/hooks/pre-push.sample b/.git-pre-1.0/hooks/pre-push.sample new file mode 100644 index 0000000..4ce688d --- /dev/null +++ b/.git-pre-1.0/hooks/pre-push.sample @@ -0,0 +1,53 @@ +#!/bin/sh + +# An example hook script to verify what is about to be pushed. Called by "git +# push" after it has checked the remote status, but before anything has been +# pushed. If this script exits with a non-zero status nothing will be pushed. +# +# This hook is called with the following parameters: +# +# $1 -- Name of the remote to which the push is being done +# $2 -- URL to which the push is being done +# +# If pushing without using a named remote those arguments will be equal. +# +# Information about the commits which are being pushed is supplied as lines to +# the standard input in the form: +# +# +# +# This sample shows how to prevent push of commits where the log message starts +# with "WIP" (work in progress). + +remote="$1" +url="$2" + +zero=$(git hash-object --stdin &2 "Found WIP commit in $local_ref, not pushing" + exit 1 + fi + fi +done + +exit 0 diff --git a/.git-pre-1.0/hooks/pre-rebase.sample b/.git-pre-1.0/hooks/pre-rebase.sample new file mode 100644 index 0000000..6cbef5c --- /dev/null +++ b/.git-pre-1.0/hooks/pre-rebase.sample @@ -0,0 +1,169 @@ +#!/bin/sh +# +# Copyright (c) 2006, 2008 Junio C Hamano +# +# The "pre-rebase" hook is run just before "git rebase" starts doing +# its job, and can prevent the command from running by exiting with +# non-zero status. +# +# The hook is called with the following parameters: +# +# $1 -- the upstream the series was forked from. +# $2 -- the branch being rebased (or empty when rebasing the current branch). +# +# This sample shows how to prevent topic branches that are already +# merged to 'next' branch from getting rebased, because allowing it +# would result in rebasing already published history. + +publish=next +basebranch="$1" +if test "$#" = 2 +then + topic="refs/heads/$2" +else + topic=`git symbolic-ref HEAD` || + exit 0 ;# we do not interrupt rebasing detached HEAD +fi + +case "$topic" in +refs/heads/??/*) + ;; +*) + exit 0 ;# we do not interrupt others. + ;; +esac + +# Now we are dealing with a topic branch being rebased +# on top of master. Is it OK to rebase it? + +# Does the topic really exist? +git show-ref -q "$topic" || { + echo >&2 "No such branch $topic" + exit 1 +} + +# Is topic fully merged to master? +not_in_master=`git rev-list --pretty=oneline ^master "$topic"` +if test -z "$not_in_master" +then + echo >&2 "$topic is fully merged to master; better remove it." + exit 1 ;# we could allow it, but there is no point. +fi + +# Is topic ever merged to next? If so you should not be rebasing it. +only_next_1=`git rev-list ^master "^$topic" ${publish} | sort` +only_next_2=`git rev-list ^master ${publish} | sort` +if test "$only_next_1" = "$only_next_2" +then + not_in_topic=`git rev-list "^$topic" master` + if test -z "$not_in_topic" + then + echo >&2 "$topic is already up to date with master" + exit 1 ;# we could allow it, but there is no point. + else + exit 0 + fi +else + not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"` + /usr/bin/perl -e ' + my $topic = $ARGV[0]; + my $msg = "* $topic has commits already merged to public branch:\n"; + my (%not_in_next) = map { + /^([0-9a-f]+) /; + ($1 => 1); + } split(/\n/, $ARGV[1]); + for my $elem (map { + /^([0-9a-f]+) (.*)$/; + [$1 => $2]; + } split(/\n/, $ARGV[2])) { + if (!exists $not_in_next{$elem->[0]}) { + if ($msg) { + print STDERR $msg; + undef $msg; + } + print STDERR " $elem->[1]\n"; + } + } + ' "$topic" "$not_in_next" "$not_in_master" + exit 1 +fi + +<<\DOC_END + +This sample hook safeguards topic branches that have been +published from being rewound. + +The workflow assumed here is: + + * Once a topic branch forks from "master", "master" is never + merged into it again (either directly or indirectly). + + * Once a topic branch is fully cooked and merged into "master", + it is deleted. If you need to build on top of it to correct + earlier mistakes, a new topic branch is created by forking at + the tip of the "master". This is not strictly necessary, but + it makes it easier to keep your history simple. + + * Whenever you need to test or publish your changes to topic + branches, merge them into "next" branch. + +The script, being an example, hardcodes the publish branch name +to be "next", but it is trivial to make it configurable via +$GIT_DIR/config mechanism. + +With this workflow, you would want to know: + +(1) ... if a topic branch has ever been merged to "next". Young + topic branches can have stupid mistakes you would rather + clean up before publishing, and things that have not been + merged into other branches can be easily rebased without + affecting other people. But once it is published, you would + not want to rewind it. + +(2) ... if a topic branch has been fully merged to "master". + Then you can delete it. More importantly, you should not + build on top of it -- other people may already want to + change things related to the topic as patches against your + "master", so if you need further changes, it is better to + fork the topic (perhaps with the same name) afresh from the + tip of "master". + +Let's look at this example: + + o---o---o---o---o---o---o---o---o---o "next" + / / / / + / a---a---b A / / + / / / / + / / c---c---c---c B / + / / / \ / + / / / b---b C \ / + / / / / \ / + ---o---o---o---o---o---o---o---o---o---o---o "master" + + +A, B and C are topic branches. + + * A has one fix since it was merged up to "next". + + * B has finished. It has been fully merged up to "master" and "next", + and is ready to be deleted. + + * C has not merged to "next" at all. + +We would want to allow C to be rebased, refuse A, and encourage +B to be deleted. + +To compute (1): + + git rev-list ^master ^topic next + git rev-list ^master next + + if these match, topic has not merged in next at all. + +To compute (2): + + git rev-list master..topic + + if this is empty, it is fully merged to "master". + +DOC_END diff --git a/.git-pre-1.0/hooks/pre-receive.sample b/.git-pre-1.0/hooks/pre-receive.sample new file mode 100644 index 0000000..a1fd29e --- /dev/null +++ b/.git-pre-1.0/hooks/pre-receive.sample @@ -0,0 +1,24 @@ +#!/bin/sh +# +# An example hook script to make use of push options. +# The example simply echoes all push options that start with 'echoback=' +# and rejects all pushes when the "reject" push option is used. +# +# To enable this hook, rename this file to "pre-receive". + +if test -n "$GIT_PUSH_OPTION_COUNT" +then + i=0 + while test "$i" -lt "$GIT_PUSH_OPTION_COUNT" + do + eval "value=\$GIT_PUSH_OPTION_$i" + case "$value" in + echoback=*) + echo "echo from the pre-receive-hook: ${value#*=}" >&2 + ;; + reject) + exit 1 + esac + i=$((i + 1)) + done +fi diff --git a/.git-pre-1.0/hooks/prepare-commit-msg.sample b/.git-pre-1.0/hooks/prepare-commit-msg.sample new file mode 100644 index 0000000..10fa14c --- /dev/null +++ b/.git-pre-1.0/hooks/prepare-commit-msg.sample @@ -0,0 +1,42 @@ +#!/bin/sh +# +# An example hook script to prepare the commit log message. +# Called by "git commit" with the name of the file that has the +# commit message, followed by the description of the commit +# message's source. The hook's purpose is to edit the commit +# message file. If the hook fails with a non-zero status, +# the commit is aborted. +# +# To enable this hook, rename this file to "prepare-commit-msg". + +# This hook includes three examples. The first one removes the +# "# Please enter the commit message..." help message. +# +# The second includes the output of "git diff --name-status -r" +# into the message, just before the "git status" output. It is +# commented because it doesn't cope with --amend or with squashed +# commits. +# +# The third example adds a Signed-off-by line to the message, that can +# still be edited. This is rarely a good idea. + +COMMIT_MSG_FILE=$1 +COMMIT_SOURCE=$2 +SHA1=$3 + +/usr/bin/perl -i.bak -ne 'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE" + +# case "$COMMIT_SOURCE,$SHA1" in +# ,|template,) +# /usr/bin/perl -i.bak -pe ' +# print "\n" . `git diff --cached --name-status -r` +# if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;; +# *) ;; +# esac + +# SOB=$(git var GIT_COMMITTER_IDENT | sed -n 's/^\(.*>\).*$/Signed-off-by: \1/p') +# git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE" +# if test -z "$COMMIT_SOURCE" +# then +# /usr/bin/perl -i.bak -pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE" +# fi diff --git a/.git-pre-1.0/hooks/push-to-checkout.sample b/.git-pre-1.0/hooks/push-to-checkout.sample new file mode 100644 index 0000000..af5a0c0 --- /dev/null +++ b/.git-pre-1.0/hooks/push-to-checkout.sample @@ -0,0 +1,78 @@ +#!/bin/sh + +# An example hook script to update a checked-out tree on a git push. +# +# This hook is invoked by git-receive-pack(1) when it reacts to git +# push and updates reference(s) in its repository, and when the push +# tries to update the branch that is currently checked out and the +# receive.denyCurrentBranch configuration variable is set to +# updateInstead. +# +# By default, such a push is refused if the working tree and the index +# of the remote repository has any difference from the currently +# checked out commit; when both the working tree and the index match +# the current commit, they are updated to match the newly pushed tip +# of the branch. This hook is to be used to override the default +# behaviour; however the code below reimplements the default behaviour +# as a starting point for convenient modification. +# +# The hook receives the commit with which the tip of the current +# branch is going to be updated: +commit=$1 + +# It can exit with a non-zero status to refuse the push (when it does +# so, it must not modify the index or the working tree). +die () { + echo >&2 "$*" + exit 1 +} + +# Or it can make any necessary changes to the working tree and to the +# index to bring them to the desired state when the tip of the current +# branch is updated to the new commit, and exit with a zero status. +# +# For example, the hook can simply run git read-tree -u -m HEAD "$1" +# in order to emulate git fetch that is run in the reverse direction +# with git push, as the two-tree form of git read-tree -u -m is +# essentially the same as git switch or git checkout that switches +# branches while keeping the local changes in the working tree that do +# not interfere with the difference between the branches. + +# The below is a more-or-less exact translation to shell of the C code +# for the default behaviour for git's push-to-checkout hook defined in +# the push_to_deploy() function in builtin/receive-pack.c. +# +# Note that the hook will be executed from the repository directory, +# not from the working tree, so if you want to perform operations on +# the working tree, you will have to adapt your code accordingly, e.g. +# by adding "cd .." or using relative paths. + +if ! git update-index -q --ignore-submodules --refresh +then + die "Up-to-date check failed" +fi + +if ! git diff-files --quiet --ignore-submodules -- +then + die "Working directory has unstaged changes" +fi + +# This is a rough translation of: +# +# head_has_history() ? "HEAD" : EMPTY_TREE_SHA1_HEX +if git cat-file -e HEAD 2>/dev/null +then + head=HEAD +else + head=$(git hash-object -t tree --stdin &2 + exit 1 +} + +unset GIT_DIR GIT_WORK_TREE +cd "$worktree" && + +if grep -q "^diff --git " "$1" +then + validate_patch "$1" +else + validate_cover_letter "$1" +fi && + +if test "$GIT_SENDEMAIL_FILE_COUNTER" = "$GIT_SENDEMAIL_FILE_TOTAL" +then + git config --unset-all sendemail.validateWorktree && + trap 'git worktree remove -ff "$worktree"' EXIT && + validate_series +fi diff --git a/.git-pre-1.0/hooks/update.sample b/.git-pre-1.0/hooks/update.sample new file mode 100644 index 0000000..c4d426b --- /dev/null +++ b/.git-pre-1.0/hooks/update.sample @@ -0,0 +1,128 @@ +#!/bin/sh +# +# An example hook script to block unannotated tags from entering. +# Called by "git receive-pack" with arguments: refname sha1-old sha1-new +# +# To enable this hook, rename this file to "update". +# +# Config +# ------ +# hooks.allowunannotated +# This boolean sets whether unannotated tags will be allowed into the +# repository. By default they won't be. +# hooks.allowdeletetag +# This boolean sets whether deleting tags will be allowed in the +# repository. By default they won't be. +# hooks.allowmodifytag +# This boolean sets whether a tag may be modified after creation. By default +# it won't be. +# hooks.allowdeletebranch +# This boolean sets whether deleting branches will be allowed in the +# repository. By default they won't be. +# hooks.denycreatebranch +# This boolean sets whether remotely creating branches will be denied +# in the repository. By default this is allowed. +# + +# --- Command line +refname="$1" +oldrev="$2" +newrev="$3" + +# --- Safety check +if [ -z "$GIT_DIR" ]; then + echo "Don't run this script from the command line." >&2 + echo " (if you want, you could supply GIT_DIR then run" >&2 + echo " $0 )" >&2 + exit 1 +fi + +if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then + echo "usage: $0 " >&2 + exit 1 +fi + +# --- Config +allowunannotated=$(git config --type=bool hooks.allowunannotated) +allowdeletebranch=$(git config --type=bool hooks.allowdeletebranch) +denycreatebranch=$(git config --type=bool hooks.denycreatebranch) +allowdeletetag=$(git config --type=bool hooks.allowdeletetag) +allowmodifytag=$(git config --type=bool hooks.allowmodifytag) + +# check for no description +projectdesc=$(sed -e '1q' "$GIT_DIR/description") +case "$projectdesc" in +"Unnamed repository"* | "") + echo "*** Project description file hasn't been set" >&2 + exit 1 + ;; +esac + +# --- Check types +# if $newrev is 0000...0000, it's a commit to delete a ref. +zero=$(git hash-object --stdin &2 + echo "*** Use 'git tag [ -a | -s ]' for tags you want to propagate." >&2 + exit 1 + fi + ;; + refs/tags/*,delete) + # delete tag + if [ "$allowdeletetag" != "true" ]; then + echo "*** Deleting a tag is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/tags/*,tag) + # annotated tag + if [ "$allowmodifytag" != "true" ] && git rev-parse $refname > /dev/null 2>&1 + then + echo "*** Tag '$refname' already exists." >&2 + echo "*** Modifying a tag is not allowed in this repository." >&2 + exit 1 + fi + ;; + refs/heads/*,commit) + # branch + if [ "$oldrev" = "$zero" -a "$denycreatebranch" = "true" ]; then + echo "*** Creating a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/heads/*,delete) + # delete branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + refs/remotes/*,commit) + # tracking branch + ;; + refs/remotes/*,delete) + # delete tracking branch + if [ "$allowdeletebranch" != "true" ]; then + echo "*** Deleting a tracking branch is not allowed in this repository" >&2 + exit 1 + fi + ;; + *) + # Anything else (is there anything else?) + echo "*** Update hook: unknown type of update to ref $refname of type $newrev_type" >&2 + exit 1 + ;; +esac + +# --- Finished +exit 0 diff --git a/.git-pre-1.0/index b/.git-pre-1.0/index new file mode 100644 index 0000000000000000000000000000000000000000..ae2e5ce4f496a216718f64a4046649eb3821ac65 GIT binary patch literal 29242 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

k$o*^%F{K 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 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/info/exclude b/.git-pre-1.0/info/exclude new file mode 100644 index 0000000..a5196d1 --- /dev/null +++ b/.git-pre-1.0/info/exclude @@ -0,0 +1,6 @@ +# git ls-files --others --exclude-from=.git/info/exclude +# Lines that start with '#' are comments. +# For a project mostly in C, the following would be a good set of +# exclude patterns (uncomment them if you want to use them): +# *.[oa] +# *~ diff --git a/.git-pre-1.0/info/refs b/.git-pre-1.0/info/refs new file mode 100644 index 0000000..308a435 --- /dev/null +++ b/.git-pre-1.0/info/refs @@ -0,0 +1,2 @@ +b01f07cdfffd00ab4f70a530de81473dbaa79268 refs/heads/main +67941294fcc5198d307f35b7d1342d24c4e6cba1 refs/remotes/origin/main diff --git a/.git-pre-1.0/logs/HEAD b/.git-pre-1.0/logs/HEAD new file mode 100644 index 0000000..e33cd42 --- /dev/null +++ b/.git-pre-1.0/logs/HEAD @@ -0,0 +1,63 @@ +0000000000000000000000000000000000000000 2499874d7abf86a7ca0a32f7ef613ef211f17ebe Big Pappa 1781583929 -0500 commit (initial): Initial RS-Warehouse 0.0.0 +2499874d7abf86a7ca0a32f7ef613ef211f17ebe ca60ded60927ff58cc2d09e4aaacac830d2faed9 Big Pappa 1781594437 -0500 commit: Development Backup +ca60ded60927ff58cc2d09e4aaacac830d2faed9 82e3d21ca71d70033417d25d24fd18164cfe5702 Big Pappa 1781620812 -0500 commit: RS-Warehouse update to 0.0.2 +82e3d21ca71d70033417d25d24fd18164cfe5702 cbb0d10b30dfe8e99c6caf73b0593860f56d8675 Big Pappa 1781668541 -0500 commit: RS-Warehouse update to 0.0.3 +cbb0d10b30dfe8e99c6caf73b0593860f56d8675 aa7a3bc819db9bc6d7132bcc594c72053862319e Big Pappa 1781679011 -0500 commit: RS-Warehouse update to 0.0.4 +aa7a3bc819db9bc6d7132bcc594c72053862319e aa58ab74124fa31b472271dd1d467cba759c1dd2 Big Pappa 1781733670 -0500 commit: RS-Warehouse update to 0.0.5 +aa58ab74124fa31b472271dd1d467cba759c1dd2 b858ac9f30e078742944a86da1a07843bd4722ee Big Pappa 1781749935 -0500 commit: RS-Warehouse update to 0.0.6 +b858ac9f30e078742944a86da1a07843bd4722ee 73c049e8a05c09d847432337cab0bb415c9f55a2 Big Pappa 1781812099 -0500 commit: RS-Warehouse update to 0.0.7 +73c049e8a05c09d847432337cab0bb415c9f55a2 f4695ccf82f3c3003f12e10f296ad79098470962 Big Pappa 1781897083 -0500 commit: RS-Warehouse update to 0.0. +f4695ccf82f3c3003f12e10f296ad79098470962 3509a0df128df4188510c91b2abf1f38d0d1161c Big Pappa 1781981169 -0500 commit: RS-Warehouse update to 0.0.9 +3509a0df128df4188510c91b2abf1f38d0d1161c fc5565421b78e6e840c8d4fe15e317d1f388d377 Big Pappa 1781984020 -0500 commit: v0.0.10 +fc5565421b78e6e840c8d4fe15e317d1f388d377 b9867afc856a0bd21c84c43dcfb07b2049d1783d Big Pappa 1781984098 -0500 commit: v0.0.10 +b9867afc856a0bd21c84c43dcfb07b2049d1783d 2fe1d389f6b2bed2de8bd3606bb48bee48987824 Big Pappa 1781988464 -0500 commit: v0.0.11 +2fe1d389f6b2bed2de8bd3606bb48bee48987824 5ce977460035814b4d74b8737454d37e59e3d693 Big Pappa 1782102937 -0500 commit: v0.1.00 +5ce977460035814b4d74b8737454d37e59e3d693 aef5157e4c1e0a4d5daa4bd0b578d77bf167cc4f Big Pappa 1782113792 -0500 commit: v0.1.1 +aef5157e4c1e0a4d5daa4bd0b578d77bf167cc4f 872a129f08c4b020e414be5bfab77a3c8a53f26e Big Pappa 1782150397 -0500 commit: v0.1.2 +872a129f08c4b020e414be5bfab77a3c8a53f26e b8402c623396ad0784a99f99e7dd0dfa0d35730d Big Pappa 1782181698 -0500 commit: v0.2.0 +b8402c623396ad0784a99f99e7dd0dfa0d35730d efa20aedd22d171eee782abed595dd630099959d Big Pappa 1782186723 -0500 commit: v0.2.1 +efa20aedd22d171eee782abed595dd630099959d 7549a5a61af35d0fccfecef05c78f7e833d47799 Big Pappa 1782189618 -0500 commit: v0.3.0 +7549a5a61af35d0fccfecef05c78f7e833d47799 43e5314e778e82fc85dbd8f593c64409cce682e7 Big Pappa 1782202439 -0500 commit: v0.4.0 +43e5314e778e82fc85dbd8f593c64409cce682e7 38fc2130a465dfc46910ed90e53593c0b26c1c70 Big Pappa 1782272226 -0500 commit: v0.5.0 +38fc2130a465dfc46910ed90e53593c0b26c1c70 fa7d51df8c534570079c6d2c242a206405c6725e Big Pappa 1782272237 -0500 commit: v0.5.0 +fa7d51df8c534570079c6d2c242a206405c6725e b712addcfbeb95fca6782544500a5dd8bbfa7c28 Big Pappa 1782291273 -0500 commit: v0.6.0 +b712addcfbeb95fca6782544500a5dd8bbfa7c28 a2fe1972b46d94dbd7b9a3f86f8e8609afaee548 Big Pappa 1782320347 -0500 commit: v0.7.0 +a2fe1972b46d94dbd7b9a3f86f8e8609afaee548 a6e27369c699b6288c08932f04562f8800cc4ba0 Big Pappa 1782329883 -0500 commit: v0.7.1 +a6e27369c699b6288c08932f04562f8800cc4ba0 7e26b590c8f8663b06ce7fa5374520c6bc859073 Big Pappa 1782334831 -0500 commit: v0.7.2 +7e26b590c8f8663b06ce7fa5374520c6bc859073 f3d2015c396bb8bfb4dfe97f00f28b40ac7e5cbb Big Pappa 1782413022 -0500 commit: v0.8.0 +f3d2015c396bb8bfb4dfe97f00f28b40ac7e5cbb fbc09dca61cabd6a166d79a89fffd6fc96615ee3 Big Pappa 1782475989 -0500 commit: v0.9.0 +fbc09dca61cabd6a166d79a89fffd6fc96615ee3 c54b678ac7eec3e8ed82a38c87f46b3d1e7b0b23 Big Pappa 1782505517 -0500 commit: v0.9.1 +c54b678ac7eec3e8ed82a38c87f46b3d1e7b0b23 c355e563fb38e5e7998e8615aae71e1df1c4feaa Big Pappa 1782679800 -0500 commit: v0.9.2 +c355e563fb38e5e7998e8615aae71e1df1c4feaa 6097d189a04f6375d6ec441001ab8c72e69e7c76 Big Pappa 1782843548 -0500 commit: v0.10.0 +6097d189a04f6375d6ec441001ab8c72e69e7c76 6629401c3ac909a5270f4ac64f385df4d429caf3 Big Pappa 1782847021 -0500 commit: v0.10.1 +6629401c3ac909a5270f4ac64f385df4d429caf3 2016ea053f9845718f4435230f6581d40e05f4fa Big Pappa 1782848401 -0500 commit: v0.11.0 +2016ea053f9845718f4435230f6581d40e05f4fa dfc3727739f18ce14dfc5f364282ced02376df2f Big Pappa 1782858345 -0500 commit: v0.12.0 +dfc3727739f18ce14dfc5f364282ced02376df2f 5cc78a6d4caef52de0d3b77e07347f1b2710d6cc Big Pappa 1782883259 -0500 commit: v0.13.0 +5cc78a6d4caef52de0d3b77e07347f1b2710d6cc 3d4ebb9b18fa516ed0483f823203e63d908f2139 Big Pappa 1782892078 -0500 commit: v0.14.0 +3d4ebb9b18fa516ed0483f823203e63d908f2139 39eaa3f67a0ef64fed37530320dedb134f25a6c3 Big Pappa 1782929554 -0500 commit: v0.15.0 +39eaa3f67a0ef64fed37530320dedb134f25a6c3 0418832a140a12154cc2587eced7ce2bfb27b9fd Big Pappa 1782945264 -0500 commit: v0.16.0 +0418832a140a12154cc2587eced7ce2bfb27b9fd b76c9f770786652151e0cf61818bd96961d57ba6 Big Pappa 1782948612 -0500 commit: v0.17.0 +b76c9f770786652151e0cf61818bd96961d57ba6 51a04152ea23980635070f0b721a65b3701694d1 Big Pappa 1783020022 -0500 commit: v0.18.0 +51a04152ea23980635070f0b721a65b3701694d1 4ccfc9e5faa358a5f133cc7cfb7ebaf82fc84919 Big Pappa 1783367177 -0500 commit: v0.19.0 +4ccfc9e5faa358a5f133cc7cfb7ebaf82fc84919 9c4ef251fd0b98b7e000e20a1c68540770c7d83c Big Pappa 1783416396 -0500 commit: v0.20.0 +9c4ef251fd0b98b7e000e20a1c68540770c7d83c 1ccc406dbf0f440e3ecc1d5da94a11ca2d66179e Big Pappa 1783431619 -0500 commit: v0.20.0 +1ccc406dbf0f440e3ecc1d5da94a11ca2d66179e 7d26cd4ddd04cafe90cc9d24b27b412eaccc02d4 Big Pappa 1783462003 -0500 commit: v0.21.0 +7d26cd4ddd04cafe90cc9d24b27b412eaccc02d4 76c6894f0073441c23ad48ac931c8f02a1f9cd2d Big Pappa 1783504717 -0500 commit: v0.22.0 +76c6894f0073441c23ad48ac931c8f02a1f9cd2d 89e0995c150c4f143759983a8d1357189667b44d Big Pappa 1783509550 -0500 commit: v0.22.0 +89e0995c150c4f143759983a8d1357189667b44d f0873fb455ee34404e74a573da151660219d5658 Big Pappa 1783923430 -0500 commit: v0.23.0 +f0873fb455ee34404e74a573da151660219d5658 d299a41ec6c9bb5e63a793eec1e8b3d129e5da46 Big Pappa 1783934388 -0500 commit: v0.23.0 +d299a41ec6c9bb5e63a793eec1e8b3d129e5da46 aab96a938507320fdca7937873d5562145b502d4 Big Pappa 1783973975 -0500 commit: v0.30.0 +aab96a938507320fdca7937873d5562145b502d4 1852e9f15e8af7150f466466297bb184d705eb97 Big Pappa 1784137506 -0500 commit: v0.40.0 +1852e9f15e8af7150f466466297bb184d705eb97 8805b55f68fb69ced0061abb3bdb0f3cf7cacb67 Big Pappa 1784170630 -0500 commit: v0.40.1 +8805b55f68fb69ced0061abb3bdb0f3cf7cacb67 d443ed90408a2e02009b6223b2a36a0704c63ec9 Big Pappa 1784266802 -0500 commit: v0.40.2 +d443ed90408a2e02009b6223b2a36a0704c63ec9 fc48398f5f3496b06d0a27ba8cf2bdb06e399858 Big Pappa 1784576271 -0500 commit: v0.40.4 +fc48398f5f3496b06d0a27ba8cf2bdb06e399858 7ab2a8928d89f5ca8301ce2a3daa4d13ddc68e79 Big Pappa 1784678893 -0500 commit: v0.40.4 +7ab2a8928d89f5ca8301ce2a3daa4d13ddc68e79 7d1eeb06bf9f352658aef8be00c8b0fc88abb718 Big Pappa 1785098931 -0500 commit: v0.40.5 +7d1eeb06bf9f352658aef8be00c8b0fc88abb718 67941294fcc5198d307f35b7d1342d24c4e6cba1 Big Pappa 1785296491 -0500 commit: v0.50.1 +67941294fcc5198d307f35b7d1342d24c4e6cba1 b01f07cdfffd00ab4f70a530de81473dbaa79268 Big Pappa 1785312925 -0500 commit: v0.50.2 +b01f07cdfffd00ab4f70a530de81473dbaa79268 153dbfe75bf61a8fbbabc19541e62f15cf3b5f68 Big Pappa 1785320034 -0500 commit: v0.50.2 +153dbfe75bf61a8fbbabc19541e62f15cf3b5f68 951db2564705080a8d51749ab7ca681a6c5fe37e Big Pappa 1785357975 -0500 commit: v0.50.2 +951db2564705080a8d51749ab7ca681a6c5fe37e 5c5363c25682a6dc8a19262fc63d4b1f123e318b Big Pappa 1786034617 -0500 commit: 1.0.0 +5c5363c25682a6dc8a19262fc63d4b1f123e318b 003f9724e48adcf06b0ab65d6f41864743d18ba0 Big Pappa 1786057922 -0500 commit: 1.0.0 +003f9724e48adcf06b0ab65d6f41864743d18ba0 0000000000000000000000000000000000000000 Big Pappa 1786071787 -0500 Branch: renamed refs/heads/main to refs/heads/main +003f9724e48adcf06b0ab65d6f41864743d18ba0 003f9724e48adcf06b0ab65d6f41864743d18ba0 Big Pappa 1786071787 -0500 Branch: renamed refs/heads/main to refs/heads/main diff --git a/.git-pre-1.0/logs/refs/heads/main b/.git-pre-1.0/logs/refs/heads/main new file mode 100644 index 0000000..13549d7 --- /dev/null +++ b/.git-pre-1.0/logs/refs/heads/main @@ -0,0 +1,62 @@ +0000000000000000000000000000000000000000 2499874d7abf86a7ca0a32f7ef613ef211f17ebe Big Pappa 1781583929 -0500 commit (initial): Initial RS-Warehouse 0.0.0 +2499874d7abf86a7ca0a32f7ef613ef211f17ebe ca60ded60927ff58cc2d09e4aaacac830d2faed9 Big Pappa 1781594437 -0500 commit: Development Backup +ca60ded60927ff58cc2d09e4aaacac830d2faed9 82e3d21ca71d70033417d25d24fd18164cfe5702 Big Pappa 1781620812 -0500 commit: RS-Warehouse update to 0.0.2 +82e3d21ca71d70033417d25d24fd18164cfe5702 cbb0d10b30dfe8e99c6caf73b0593860f56d8675 Big Pappa 1781668541 -0500 commit: RS-Warehouse update to 0.0.3 +cbb0d10b30dfe8e99c6caf73b0593860f56d8675 aa7a3bc819db9bc6d7132bcc594c72053862319e Big Pappa 1781679011 -0500 commit: RS-Warehouse update to 0.0.4 +aa7a3bc819db9bc6d7132bcc594c72053862319e aa58ab74124fa31b472271dd1d467cba759c1dd2 Big Pappa 1781733670 -0500 commit: RS-Warehouse update to 0.0.5 +aa58ab74124fa31b472271dd1d467cba759c1dd2 b858ac9f30e078742944a86da1a07843bd4722ee Big Pappa 1781749935 -0500 commit: RS-Warehouse update to 0.0.6 +b858ac9f30e078742944a86da1a07843bd4722ee 73c049e8a05c09d847432337cab0bb415c9f55a2 Big Pappa 1781812099 -0500 commit: RS-Warehouse update to 0.0.7 +73c049e8a05c09d847432337cab0bb415c9f55a2 f4695ccf82f3c3003f12e10f296ad79098470962 Big Pappa 1781897083 -0500 commit: RS-Warehouse update to 0.0. +f4695ccf82f3c3003f12e10f296ad79098470962 3509a0df128df4188510c91b2abf1f38d0d1161c Big Pappa 1781981169 -0500 commit: RS-Warehouse update to 0.0.9 +3509a0df128df4188510c91b2abf1f38d0d1161c fc5565421b78e6e840c8d4fe15e317d1f388d377 Big Pappa 1781984020 -0500 commit: v0.0.10 +fc5565421b78e6e840c8d4fe15e317d1f388d377 b9867afc856a0bd21c84c43dcfb07b2049d1783d Big Pappa 1781984098 -0500 commit: v0.0.10 +b9867afc856a0bd21c84c43dcfb07b2049d1783d 2fe1d389f6b2bed2de8bd3606bb48bee48987824 Big Pappa 1781988464 -0500 commit: v0.0.11 +2fe1d389f6b2bed2de8bd3606bb48bee48987824 5ce977460035814b4d74b8737454d37e59e3d693 Big Pappa 1782102937 -0500 commit: v0.1.00 +5ce977460035814b4d74b8737454d37e59e3d693 aef5157e4c1e0a4d5daa4bd0b578d77bf167cc4f Big Pappa 1782113792 -0500 commit: v0.1.1 +aef5157e4c1e0a4d5daa4bd0b578d77bf167cc4f 872a129f08c4b020e414be5bfab77a3c8a53f26e Big Pappa 1782150397 -0500 commit: v0.1.2 +872a129f08c4b020e414be5bfab77a3c8a53f26e b8402c623396ad0784a99f99e7dd0dfa0d35730d Big Pappa 1782181698 -0500 commit: v0.2.0 +b8402c623396ad0784a99f99e7dd0dfa0d35730d efa20aedd22d171eee782abed595dd630099959d Big Pappa 1782186723 -0500 commit: v0.2.1 +efa20aedd22d171eee782abed595dd630099959d 7549a5a61af35d0fccfecef05c78f7e833d47799 Big Pappa 1782189618 -0500 commit: v0.3.0 +7549a5a61af35d0fccfecef05c78f7e833d47799 43e5314e778e82fc85dbd8f593c64409cce682e7 Big Pappa 1782202439 -0500 commit: v0.4.0 +43e5314e778e82fc85dbd8f593c64409cce682e7 38fc2130a465dfc46910ed90e53593c0b26c1c70 Big Pappa 1782272226 -0500 commit: v0.5.0 +38fc2130a465dfc46910ed90e53593c0b26c1c70 fa7d51df8c534570079c6d2c242a206405c6725e Big Pappa 1782272237 -0500 commit: v0.5.0 +fa7d51df8c534570079c6d2c242a206405c6725e b712addcfbeb95fca6782544500a5dd8bbfa7c28 Big Pappa 1782291273 -0500 commit: v0.6.0 +b712addcfbeb95fca6782544500a5dd8bbfa7c28 a2fe1972b46d94dbd7b9a3f86f8e8609afaee548 Big Pappa 1782320347 -0500 commit: v0.7.0 +a2fe1972b46d94dbd7b9a3f86f8e8609afaee548 a6e27369c699b6288c08932f04562f8800cc4ba0 Big Pappa 1782329883 -0500 commit: v0.7.1 +a6e27369c699b6288c08932f04562f8800cc4ba0 7e26b590c8f8663b06ce7fa5374520c6bc859073 Big Pappa 1782334831 -0500 commit: v0.7.2 +7e26b590c8f8663b06ce7fa5374520c6bc859073 f3d2015c396bb8bfb4dfe97f00f28b40ac7e5cbb Big Pappa 1782413022 -0500 commit: v0.8.0 +f3d2015c396bb8bfb4dfe97f00f28b40ac7e5cbb fbc09dca61cabd6a166d79a89fffd6fc96615ee3 Big Pappa 1782475989 -0500 commit: v0.9.0 +fbc09dca61cabd6a166d79a89fffd6fc96615ee3 c54b678ac7eec3e8ed82a38c87f46b3d1e7b0b23 Big Pappa 1782505517 -0500 commit: v0.9.1 +c54b678ac7eec3e8ed82a38c87f46b3d1e7b0b23 c355e563fb38e5e7998e8615aae71e1df1c4feaa Big Pappa 1782679800 -0500 commit: v0.9.2 +c355e563fb38e5e7998e8615aae71e1df1c4feaa 6097d189a04f6375d6ec441001ab8c72e69e7c76 Big Pappa 1782843548 -0500 commit: v0.10.0 +6097d189a04f6375d6ec441001ab8c72e69e7c76 6629401c3ac909a5270f4ac64f385df4d429caf3 Big Pappa 1782847021 -0500 commit: v0.10.1 +6629401c3ac909a5270f4ac64f385df4d429caf3 2016ea053f9845718f4435230f6581d40e05f4fa Big Pappa 1782848401 -0500 commit: v0.11.0 +2016ea053f9845718f4435230f6581d40e05f4fa dfc3727739f18ce14dfc5f364282ced02376df2f Big Pappa 1782858345 -0500 commit: v0.12.0 +dfc3727739f18ce14dfc5f364282ced02376df2f 5cc78a6d4caef52de0d3b77e07347f1b2710d6cc Big Pappa 1782883259 -0500 commit: v0.13.0 +5cc78a6d4caef52de0d3b77e07347f1b2710d6cc 3d4ebb9b18fa516ed0483f823203e63d908f2139 Big Pappa 1782892078 -0500 commit: v0.14.0 +3d4ebb9b18fa516ed0483f823203e63d908f2139 39eaa3f67a0ef64fed37530320dedb134f25a6c3 Big Pappa 1782929554 -0500 commit: v0.15.0 +39eaa3f67a0ef64fed37530320dedb134f25a6c3 0418832a140a12154cc2587eced7ce2bfb27b9fd Big Pappa 1782945264 -0500 commit: v0.16.0 +0418832a140a12154cc2587eced7ce2bfb27b9fd b76c9f770786652151e0cf61818bd96961d57ba6 Big Pappa 1782948612 -0500 commit: v0.17.0 +b76c9f770786652151e0cf61818bd96961d57ba6 51a04152ea23980635070f0b721a65b3701694d1 Big Pappa 1783020022 -0500 commit: v0.18.0 +51a04152ea23980635070f0b721a65b3701694d1 4ccfc9e5faa358a5f133cc7cfb7ebaf82fc84919 Big Pappa 1783367177 -0500 commit: v0.19.0 +4ccfc9e5faa358a5f133cc7cfb7ebaf82fc84919 9c4ef251fd0b98b7e000e20a1c68540770c7d83c Big Pappa 1783416396 -0500 commit: v0.20.0 +9c4ef251fd0b98b7e000e20a1c68540770c7d83c 1ccc406dbf0f440e3ecc1d5da94a11ca2d66179e Big Pappa 1783431619 -0500 commit: v0.20.0 +1ccc406dbf0f440e3ecc1d5da94a11ca2d66179e 7d26cd4ddd04cafe90cc9d24b27b412eaccc02d4 Big Pappa 1783462003 -0500 commit: v0.21.0 +7d26cd4ddd04cafe90cc9d24b27b412eaccc02d4 76c6894f0073441c23ad48ac931c8f02a1f9cd2d Big Pappa 1783504717 -0500 commit: v0.22.0 +76c6894f0073441c23ad48ac931c8f02a1f9cd2d 89e0995c150c4f143759983a8d1357189667b44d Big Pappa 1783509550 -0500 commit: v0.22.0 +89e0995c150c4f143759983a8d1357189667b44d f0873fb455ee34404e74a573da151660219d5658 Big Pappa 1783923430 -0500 commit: v0.23.0 +f0873fb455ee34404e74a573da151660219d5658 d299a41ec6c9bb5e63a793eec1e8b3d129e5da46 Big Pappa 1783934388 -0500 commit: v0.23.0 +d299a41ec6c9bb5e63a793eec1e8b3d129e5da46 aab96a938507320fdca7937873d5562145b502d4 Big Pappa 1783973975 -0500 commit: v0.30.0 +aab96a938507320fdca7937873d5562145b502d4 1852e9f15e8af7150f466466297bb184d705eb97 Big Pappa 1784137506 -0500 commit: v0.40.0 +1852e9f15e8af7150f466466297bb184d705eb97 8805b55f68fb69ced0061abb3bdb0f3cf7cacb67 Big Pappa 1784170630 -0500 commit: v0.40.1 +8805b55f68fb69ced0061abb3bdb0f3cf7cacb67 d443ed90408a2e02009b6223b2a36a0704c63ec9 Big Pappa 1784266802 -0500 commit: v0.40.2 +d443ed90408a2e02009b6223b2a36a0704c63ec9 fc48398f5f3496b06d0a27ba8cf2bdb06e399858 Big Pappa 1784576271 -0500 commit: v0.40.4 +fc48398f5f3496b06d0a27ba8cf2bdb06e399858 7ab2a8928d89f5ca8301ce2a3daa4d13ddc68e79 Big Pappa 1784678893 -0500 commit: v0.40.4 +7ab2a8928d89f5ca8301ce2a3daa4d13ddc68e79 7d1eeb06bf9f352658aef8be00c8b0fc88abb718 Big Pappa 1785098931 -0500 commit: v0.40.5 +7d1eeb06bf9f352658aef8be00c8b0fc88abb718 67941294fcc5198d307f35b7d1342d24c4e6cba1 Big Pappa 1785296491 -0500 commit: v0.50.1 +67941294fcc5198d307f35b7d1342d24c4e6cba1 b01f07cdfffd00ab4f70a530de81473dbaa79268 Big Pappa 1785312925 -0500 commit: v0.50.2 +b01f07cdfffd00ab4f70a530de81473dbaa79268 153dbfe75bf61a8fbbabc19541e62f15cf3b5f68 Big Pappa 1785320034 -0500 commit: v0.50.2 +153dbfe75bf61a8fbbabc19541e62f15cf3b5f68 951db2564705080a8d51749ab7ca681a6c5fe37e Big Pappa 1785357975 -0500 commit: v0.50.2 +951db2564705080a8d51749ab7ca681a6c5fe37e 5c5363c25682a6dc8a19262fc63d4b1f123e318b Big Pappa 1786034617 -0500 commit: 1.0.0 +5c5363c25682a6dc8a19262fc63d4b1f123e318b 003f9724e48adcf06b0ab65d6f41864743d18ba0 Big Pappa 1786057922 -0500 commit: 1.0.0 +003f9724e48adcf06b0ab65d6f41864743d18ba0 003f9724e48adcf06b0ab65d6f41864743d18ba0 Big Pappa 1786071787 -0500 Branch: renamed refs/heads/main to refs/heads/main diff --git a/.git-pre-1.0/objects/00/3f9724e48adcf06b0ab65d6f41864743d18ba0 b/.git-pre-1.0/objects/00/3f9724e48adcf06b0ab65d6f41864743d18ba0 new file mode 100644 index 0000000..a379d81 --- /dev/null +++ b/.git-pre-1.0/objects/00/3f9724e48adcf06b0ab65d6f41864743d18ba0 @@ -0,0 +1,5 @@ +x¥ŽAjÄ @»öÿô;3”2tQè®WøÑŸD5¨!íí;ô +ݾ�çKJ±ƒ–øÒ+3XôË”&é<: ²GëõŒaÒ&‡ +ñŠ$vªœ;o´Õ�uH6xGjB‹‹·:\gµ(Ô¬•›}+Þã +_´ï¯õh�óQ×J?©äp_ÅÇàKz5:+Í8!ÂE)Å“>G;ÿ#!Ô )ÄGüæpŸ­ gìÄΩAÛÊó +1BÛKopnœ!—ÔZ\3 ?3ˆ_” `Ù \ No newline at end of file diff --git a/.git-pre-1.0/objects/01/a36d563b889e12a73ea3ba9b61298325c5e6c7 b/.git-pre-1.0/objects/01/a36d563b889e12a73ea3ba9b61298325c5e6c7 new file mode 100644 index 0000000..fa70ad7 --- /dev/null +++ b/.git-pre-1.0/objects/01/a36d563b889e12a73ea3ba9b61298325c5e6c7 @@ -0,0 +1 @@ +x=Ê1Â0 @QæœÂ'¨èÌX±•C8ÆJ-BÙŽª¸;Û“þÏU3ÌóùÔ‘XHŸ“¹“Iiåð �7ÎapQ{ÿÁw‰KJ}ä*TÑ–ßt=ÚªÆ7ncÙ0VñàÆ{ú¤/DO, \ No newline at end of file diff --git a/.git-pre-1.0/objects/05/caa9970a260d34ace5ec3accb75f35b9e2b526 b/.git-pre-1.0/objects/05/caa9970a260d34ace5ec3accb75f35b9e2b526 new file mode 100644 index 0000000000000000000000000000000000000000..ccfced0331ce6b23a96da0bf68f7339802d39e55 GIT binary patch literal 843 zcmV-R1GM~j0o7L9ZWA#O|0F(5l+0HFe<;7L!?lDPex$FZ`hibFwh&U?dNe{92X%|Z>xmqHQ;yPlU=mus09Vtc;JVb zd5g0&^e;Es3(Pd@xkcP=mHEZV#p!X+Jn(6KjfB$22BS){Y#o%#4wFd?npFnls@PQ2 zpI0V`4HnrL$2}Tu=aSWv6uDc$Hj=6eBjHhsMMuLb_P06Yarjp`tLq ztwCqI6{zaA13w`NDTTDXEukAciDFV(i-JG#P@wb<51B5N+EHQ&>|ET;l<^hN%a+us z3YD5zT#bq4K+(xEshtXb4jL^l;1>cnI!Ja@$0i(CpqKs%6L`;Fz3C-DF74HkgSEy! z)XNvWW)c!zd$Dzla&)W^8>WqC@GA#cU=A$55?18cSI75yFkLWWC_IOM8 zQ3<^o5DS_AOU~F%O^oNjpjhLs^7mNA0YNpNfnMNB6sz4Fl;P$zRnaPYx8!#Rnc_BK zrBK5GXigploGTEvlmDr)xZ-xioW`iy2T1xCW}SADY|H~x&#%E?s6MpAg@vS*Ey;qe zOQ9UJ{&drdn4hGhl`XDK+|c6G@~jY9y*jskbwPU~ZwQ>koodlqQuccjo$Pk3Svt%; zoyKh-Sm(XN@c>UH?Xsl~PgFdyRNGew(4rjnjcsu%(yc;M4~7m9yX_(&PN%lLF#pxT V;XyLJY3uWCj~{ma_77O7X)aPyqYwZ9 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/06/d04659cdf7f38ab3fecafc1d918475fbb64d72 b/.git-pre-1.0/objects/06/d04659cdf7f38ab3fecafc1d918475fbb64d72 new file mode 100644 index 0000000000000000000000000000000000000000..f9c3c05df9bfdc79bc0c503fee5f8808193a01a1 GIT binary patch literal 1395 zcmV-(1&sQ50qt2!Z{s!)?%BU$dRaJjtt6;}EgCyO(8Zzwy4V6e?3uP1o2@Jvdc^A% z`R~i2G}KTcWf=(2L(79DoAdZ)I5Qm5t2kZ3``h{ayMtK&CAJdQ=|0Nxe4VL7p^~kB zKZ;E5(lVEkD&+otG*bIRniXd$4f#f-(UWHT@c8+D2;)B8$T<2!Dv`C(_@{UgQCX-s zddxC$`c379723>IKaURODpqS)$0E-G<>bGMtx80p(ggk)jX;l@CNK1_Yfwo6TUmS( zU)8?cYic<*R7i;f=hvc;+cY~pZOqgaNy2$lyl|jD0Jsx zyGoImMoT&UjL$3WCHjsycWS$ndGVO%YMaOn8Ust1-QGJ?Wul#92=wF)6Y-p8Fm_Ba zmcY-IL5|s|Ry~6sHrgK@(3My4{SuNgjx7Sh%b)Mw^-ddcd7Kt+D6U5L05`p=FF@87 z)o~YE>|LQCf={B@MSJnp?`7^mkK7-EVu_J2(+qBd^gPUv_Z4KEOP&NIu?el|lm(Vy zYC`q3c{SOUCV9D+8(%cyJVk3A&N^aAoq0Obi>1%SJsi_%XPsCk{h@UbFS;Haav^0K?C6@mR6o(V0v=d%DA zScU0@(ar?qWzp>Ux~AZscDDm0A7xhv799 zp#zEoYRF)=)J;ZJ5m?$`Ql>95dydm176RY)I%ZO)FrQz+HO%jrkW3b3mh|}C<7ZE0 zg{ce0T1FPt?sXdtU!%Ypfe$J_#Ny=o+LTAze7Ii5IZQ&M-AOT@CK1O^|3X*dg<`u8 z>p08=9Em)F?eZ26V{$0Y`9!e=?}l%mFjnI|-IB!>F7)J2$MFa=Sm*g}`+rk}uA)IZ zcqBHPF}jH_I}!Qvu)F3&J*=!EwMVX-XC#t8`C4AoIW?URiaXy%1zo}_ID5UG*wBRu zP-L4jk+Yd=`;O6yMFjkfQzyE8NtnsJj0;~uMjQLG5a(GYUfgX_;B;Ub!P+#wPP$X6 zOw}#Qm6rp#YGZ?`%=7z|L%*iKk;Lwmy;m6J6N zOxNK^)*8brDlvNWoUg3JY)q__g8fG;4 Bxu*aC literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/07/365705b95af7b82539f4beee71e137bdd3dc00 b/.git-pre-1.0/objects/07/365705b95af7b82539f4beee71e137bdd3dc00 new file mode 100644 index 0000000000000000000000000000000000000000..61cd7625dc9cd78e04242b7d8b3eb21af91e97b4 GIT binary patch literal 131 zcmV-}0DS*=0V^p=O;s>7wq!6gFfcPQQ3whS$SFRnLPHIVN5k$G0;EfC!~vg3Iq)L&JHP+{ literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/0f/b041ab9a3e50c32e214c4e5eccbca16bbc5c45 b/.git-pre-1.0/objects/0f/b041ab9a3e50c32e214c4e5eccbca16bbc5c45 new file mode 100644 index 0000000000000000000000000000000000000000..91e176f29ae3c0903c2feac76dae10af50a3b8eb GIT binary patch literal 53 zcmV-50LuS(0V^p=O;s?qU@$QN0)?XD;^d;tf|AU^>Vz;R4Ekl2I6_yk*wH3v;4T=I5Mg-2d#3GX5F=a3@00M>N#FEtX{G!U_qSVBa%=|othyyNx$DXeiK6b*f z!n5p`p}WMb8dRmJDVZehYk58eY+nO{&@k`Hqz zLv^R#1a|#rd6!q%ti0p-sQyyhS1E|X-2AdsB!y2~{6d4vE-xziZ~DK!y)$KPx6}~; HXc1^^)xKm+ literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/14/d95a10aa13043845065aa1640e5bd73106e07b b/.git-pre-1.0/objects/14/d95a10aa13043845065aa1640e5bd73106e07b new file mode 100644 index 0000000000000000000000000000000000000000..947d7e60b84d3786e5cb22768923534efb1826ff GIT binary patch literal 1858 zcmV-I2fg@s0p(iVZ`(Ey-*f&7)(?eKG(ywIwQ12NDe57O*LG&biHl1d{u<0RE#QVPE@kh#&teCL<7cXD#|1yu0>v+alQrtwcEE6f_mB?rC zyoe?LTGSE=O z&xj&aWExlTB!)B}bq}B794bNv1^lK+d8U<*pi+YP>Plo~gyiQHRNy84s~8J8izfB; zwWxF&HLb3|Z}Dv$mEW`Iu*h?sU}BXFHTJvYbEw4>^nf;~4wvMNmvvU1^WG5J7`>A+ zUY>~3H`c!1*_qdqOe8GH;<9Au6NH}qwX?(E>c&dY4kWjQNLiewNHlE5kp{2xO2V{b zRQ_CE)*^krp5!#X;Wmj1C=;N;9?J@l|Gld>duWtb95T+-q#31+=3VjvEkudzpz%-V zEXoUc6KCR2em>`kh%>aH93t&5BntWP>bxtt1QH-_0>BQ`cuU3l!WF$8E273bYI4Mw zs>PHIm7GrR0n6(wL+?ycl2^5a3Zi#EwEdH!$atJHp2w4nU*-wa(yWl^iN_10`$aQe zjdI97OxfYC5=|=Tj$}~8Q!(2>^u9G@bv#JoAkMO4u~(a>?qRU@lCB31>>40O^IplC zue7-zWQWkGCU($<+@T?DPoJ_Up5Q8as}hlklBFn&Y+=exQm^*A^LJ zijl7csN@)kBWh-z&KtJMHDQ2Jf5Ol*O4@1)?YX;>pai-!-Np#@=M_xqy?v(u)&ZjciMehYRim;@+3m7wFU6KRhHV<;zF&?~TcgOUW{vT!h?QKjp^*w+2czkx;h(N}-A$p;*yksJHEdmneSz36m8dA^chzv$>6U0s+c8a*(%T01uk@72e$@rgB0NW9Xq?I3vYuGcehiEIIzw$ffo}Xc{(49|cyDGcq7TCJgNzv;!mOKA5l;{)-wN>*TL}W5- zfhJ8h=Q$i|I;`dkL`2jgS1+9=$J%EUcQ25-jnr@i8!j~*-m?D~zNOC5BIF>T%f@F% z$7k&QA1yu(ngfplj>(tD2FQ!ABIAJ=x#_$S9G%-u+$_~?@H6pQ=oU8>n{f1MMv7vG zr#Gh8QcdV-8({4QXjyRz71TCa6@!dLol$E})@1VDS+-~XWkG^*N*0#m>wW3_7(CV3H>x`1jO4AD) rX7Q+x(UJZ^h&xY)Cn>}y?q$U&ZKIP%xR5`_XxlU8@-vA)xocGEC@o?&r B5Sah~ literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/1a/95bf9648a636d911e37882b2d3111863e1fb92 b/.git-pre-1.0/objects/1a/95bf9648a636d911e37882b2d3111863e1fb92 new file mode 100644 index 0000000000000000000000000000000000000000..f22cfa7e9af453c65cdbe0329902a3fd5dac7bd8 GIT binary patch literal 783 zcmV+q1MvKK0nL_OPunmQhIidx;c?aSVVJl;4(nR$0sKrViG=(h@wy~u+lnIEH+F;w*8AJdM^`A zu^n3wG1sTP9$UmxnGM$BjzxGR;pGxxy{pqs6N#abR7)J@jRh469_1a^cDlKdLK`BC z#xvgrk+nO`6y%Xb#4staS2nj%kQl}_zNSiBA6L*R*Oe;5LGtjx45q>`v&2(QmbJ{( z4Dx*26sCD!=c8rf{H9@IWR>UVz4=tkTg(2SCQyV4jfoJ_q#4lIlg3Lpw?&VWfU^*V zoM??^{*)&X6M1kwls}dXPHn}EM)^}+mCoUbH0qftu-sA?4g}mA_SCZXM-|JhPR?7 zQ34s2(AvmTW%TA1ojI42;l+Qe>CMqCrau$H^*9nz(Gk&W3b&&umtkwjdKxa$?dm2cGbA0KC3NTK2hmU-bM|zrSq1^b~x+BwS1UCuDz^;RNkTNLV)7*Ua&e1^4paQu-%dkm}2?Jg3$If z=F1ipV9_Q6zOAPNMp}fdT&i$rPkz>`OJ9@0M#E0Cwi=+tq&FLJygGY9!(3A`ekM?tXW_`}9be5qo>|?&!rrODw!b|1&&F~T}qS7~dO^U`&_^6o8r01Z$^lN^t#JYxD7g(YQKco8> zp~vbmsSD{m=*J|aCLqeFrP+lVuhJ~d7E5$pOzWwa=7+xRhF$rHPX;aPXFLVy(j->!F5kt`@1X7Nd1z%Wfi}?OfI!vzt ze+xdzMR|@Tp&;vb{4hgru`#>;PZ5untM0@(z#?QTC7_S z`H2HVx*ZX_T7b^>i%*$z2Yx_>q!hCDwt#KhsWb+KwOID&9_CnpCnro7O6^%_3G7C! zhRXO7=&(`n6oj&-SYFLyYQm0~lVqxSiuVm@l)Qy|1g<5J>iiWBSVSw z>ZQ^N+#H4fqJB=3Q*0&ul=-Rfp_Z6XcljT;^;xz7#F=7yJ4VRV(_zk6mJHZ-=~Y_)!^?WyGxjmDsT-Kx_hwM<+bEHKUo5Gf?qRSMKy+pg}n-(@k(n(hUzOEnSDJ{dQ}xvlZKx Zng8)n^(3cOzqDyL8wd;F;TNu*!k@{VzeWH6 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/2b/43b549e4ef368f27b23e2227c2b276b94edfe3 b/.git-pre-1.0/objects/2b/43b549e4ef368f27b23e2227c2b276b94edfe3 new file mode 100644 index 0000000000000000000000000000000000000000..005b19cd5a0257060cc97c1474126f23e5679c02 GIT binary patch literal 107 zcmV-x0F?iD0VRwv4#F@DMVWI7pP&L(M#RX(2^`l77HJ&$r$PvEcPe#xdc)Jp)ia%r z=R;?CaZwUqrT`?Y4{K%fH-|obg-$##)^Z- NanLvY(jVmsDB?T=FKPe) literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/2c/5edf8a15831ae177af338986af362acc0dc590 b/.git-pre-1.0/objects/2c/5edf8a15831ae177af338986af362acc0dc590 new file mode 100644 index 0000000000000000000000000000000000000000..9649bdca56991689fe6eb03808890c7269a7856b GIT binary patch literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP6c%7qmY)Ce3T+*~(VGTJPvK1tpVb5b2`S l;{4L02-22;0Pg13tKE{NC^V-lwyX`G&lG_x|`*!T644KzP2V+8C}yVTH=v^ADzBo0kSC zXBM(tAHoBq!k)}#VqfIiPO7qWFBGkI1ICD48M>m6oRYc}#)6uX zC@MSjlQ}5vZLYS=R_HDvMY)lJ6E2xCBo6asuHgz)iNcMM8L5{`qlCTVXGn8Ke$J}n zk1_A+O>N>n7b(eAOJN@15Os_nsUlH{EgF23^%%r^Mov38cwVW|46GNNFPx+J9#`yR zT}q^`vk{~b>AF}DzSi$L;?4NoGepr_CGJYNNau^dq!EnSiSJ|{*qjnoO4;!obu`#g ztH`Ct);pmrkuGyc`9-NtaL{~E|3HqOW!p#HfL$@gK}tx6fw8)T5P;b6 zwbgEhkiGA!5$YkQb>j_q*Q!*4%ItQ&AZO%w=s>q|DQKPRAx#Xk&)w_57T+~1!RQew z6d1B+2clfG;ei9B&L-horWv=O4NW@gvBL=EXGB#=d<$vmI(?)*P?G9WePw1hP8B6^ zwRqRE%!H~-^*5Mar`?f<*PFJ|YWSz*X1)B@O#ZIJebMIsVmz$Pu}j|atkbC&Z=6On zFF?(GYKEPJ`u!MBc8e?bPJ$4isUx^6nKT!fa;8_zz)%vUaV5Me_@V19!$Bi8o#@&n zbmD*tf-m26UiaPW;haAdLNn_w&2hR%lVENAtpC>|2EShaW<4fc0@KOUi)_3knt4Co zl1aC!7Hf1n0FfcPQQP4}zEXhpI%P&f0@Zi25ipbxrxrv;S{5 zMmJR74Ky(T0tLOyl+;89^@m@N-|KY0d%j9uWiPu^$%+|YWTB=MjF(cLTxs;H5dWO_zTLvUT%oEMG*UtI-3i9R9(bbYtrB+*&eQp#;ZqBCIf@@--Viz=%1PPtA9XZX zr&Y(X$JR%oERjBUD_PhPk1A*+gc(MuUWm|qqyC8;zQ}fny#c#qii4Dp4g+JggC+o7 z$5&SStAymCwMM8nnXS5Sz`IhV5>#e4^94C2ABPU~yO)C2g&xwxFo)c|ZP?U_J8)CWpZ?bHo3+i|KW zfvd&4k}eafD%B@2gHF36kDxbgrPT=klIzvM_j&;I9gaoo=f!wf>tmn1gVVTQG31w^ z94&UB<{>-7W*O`Vl%#_iz%dEuq!_lEmOw>tB~-&Ev_^Ot=K5ljqml zcy-jb|9FEY{Q~b+;$u@*APsb9Hd2pj^fk6C&l@uc+b7T*Mb^qO*BqiAu1;5VVItkB zZfZNJ3-G)S`tya};=J@Sf6Yby!b^PO0uP;1eG`UI5BF#c8^^hy{NrU2Yfla4ShgM1 q#ISovqk$ZYck>vZ;dAswI69I#A7(K`+avW!ZP0(hJ^luh2R%pOC6~nj literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/3a/f202a42b5d541830d39daf6b5e3f7e4e6334dd b/.git-pre-1.0/objects/3a/f202a42b5d541830d39daf6b5e3f7e4e6334dd new file mode 100644 index 0000000000000000000000000000000000000000..f8c65377b030ee4f6373169c34b5b0d925ffeb4e GIT binary patch literal 53 zcmV-50LuS(0V^p=O;s?qU@$QN0)?XD;^d;tf|AUjZ literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/3b/f9143247bb4778ba384e2b474ce0b0e2823cfe b/.git-pre-1.0/objects/3b/f9143247bb4778ba384e2b474ce0b0e2823cfe new file mode 100644 index 0000000000000000000000000000000000000000..df878d26f4d488093e08b3103f7f9ef8584dabb1 GIT binary patch literal 697 zcmV;q0!ICK0ligCZ`&{o-8sLa=-rZ?cEeU^26ou60qt5e-N#jy)KrBnd6Jx@|9-S& z*>al(Ee0$%k&oo#BSTlUu8x+)htoHtHTqsKceHD2Wj`L@IoF@CAg@>1FKWb{?yMjq!8?dX`WaTy7h2KHE+hte7bDoBMR+7di@X9<1M zTUk3{`X-#|V0zPgUfqMmj@2DcXAv2s?vhhSD{2Me6~RNy9@5d3jMk?assCpIZfV`` z??DBmI;g`=_hb*UOvaY(~5C!Wa={4>?_@e@Gm|;B&ho_;;iHIl za5ZTCg68a>S~`*4^NPKoy%Y2{M<=r{L8JhOEY1Y9e+6A79NG$d4+_K%#%QloG773T fvR-#Dn?wOa$PZ0n59P!ZHfymMzZ~UXE literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/3d/15d25103d8da32a89a0747c0bb3778654758c0 b/.git-pre-1.0/objects/3d/15d25103d8da32a89a0747c0bb3778654758c0 new file mode 100644 index 0000000000000000000000000000000000000000..4dabfd89bcb503c49654f0ce9483d19361d72fdd GIT binary patch literal 1090 zcmV-I1ikxs0j*cvZre5#-nE~C@Rf~pL>(j;&?Ft~#M_M8Q(>nFhORJZn{_x-lt)qS z+%?a$_t=w-hZ1T1P>PC`7l|w$p7WjWd_1I9JX)cP!Nuiwd$Qh%y$Vtkvq8*49%^ySqz z^feN!=ROyFxpU#A1q%szjkYNz{iMhsKoQdO#k@B{Ajf{QH;mg zvUl+8Rtc)`?ifj?sXtJm5=pV5e<^$$>6!`s#+gQPi&x2R#}po!f4-TSE}3M6`{uMW zrjGb6C&wJ?Ik!vz1klgKKKcCQ%oGh5N(-~uEToFyiME~Thm#!tAP0hh8a$Me9H%Tk zC3~7nUw8J&inBFZa}vkM77m0tjUtWiZk3eSVrmz+a(gNVMq?&JMU5o*Cb_n_jTP~QNmf~l`-Zy|q-BM#W=Ac`GXuK5MeqFN}a52^Pb5Z79nGC^Yx8VeMIQLm3~ZjeYguLbfWg8h`azWh*Y z_sUU_dB*XcGu7+w72GW5y!(yv&c54?lI9SfLKu~m;1 zzh$nq(hZc_9F2Fs;;kxeL;z8stj@4r zh+t|DI{Yx7+z&_7@p2RdZ@e^>)3Ya$?j?%UAOVmdbZe{I(WwzYd~>F4m=+W{{z^jX zNBcD$whM(uut!jRQ-#oWoPnm!(4g47>}>IE89tn<*ACrlBg`5qpeXKuzJ6U{BHf4R zKzKrHT$DE!E5m{P;jLZf^_hkMIe+<*LclB@aUyo5cIn+|uru_Yl# z$9{bUi**6yWip-+Yt@~VCZ;o<)UOjHAm#dk+I79RFCkj<@9eg^Ojh7EWFs=FpI~d)6{~-%<(CtwZ zU9I1#c6r{L)3~Tc`(IfE!#B&jAedL(rYV>t=tzGowZ)%Z0paVV;S&S0bVar4>ta6r I2YTS{e*EJi0ssI2 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/3d/3e6cc0841729a20d7ccd9a741971e2e08cadbd b/.git-pre-1.0/objects/3d/3e6cc0841729a20d7ccd9a741971e2e08cadbd new file mode 100644 index 0000000000000000000000000000000000000000..407b313e68490929dc0c6ec2bd7e2b569d8f2a82 GIT binary patch literal 380 zcmV-?0fYW{0V^p=O;s>6HDxd~FfcPQQE*NyNlni$s&q}sED266F3!x))5}UMOJwkQ z;#fV`?fL&r`=#8c`KqVKTi9yj*5jL)mzbVf1koyFb+3@Cp^|IH;~kuLB6N#4-Eo?N zrq#co1ZY#SZ)#qtPiApRY937Q42yXJ57ZP^D0ng&T1=R;sV-Od9-7_&piRL!`KZoS zzVxQ@CCAoTQ!8}m=k#BX*%3ak8^1mjC;#|dlv;bUQXlVI`VT$Gv!3Nn;9vJ))$xU^E>_U9MRw&gCc{C4+@#wLPVQ7n%Z?Kt3L z^zr!Ar`KP|R>rTY6aBOf(*%sfp|?K0?5g#%x~pcoDGHJf6Ws(vV6lYcW+ZJWminb= aIQ>+0k2!BsKZ9weZOqrJai;-&y#}~tF~Bqc literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/3d/eea135869843563fdb1165aceba5c119567ca1 b/.git-pre-1.0/objects/3d/eea135869843563fdb1165aceba5c119567ca1 new file mode 100644 index 0000000000000000000000000000000000000000..3330d0766a8ae6bb0101b673ce664be187bfde37 GIT binary patch literal 210 zcmV;@04@J`0V^p=O;s>5F=a3`FfcPQQE*8u$S=+;@yshr%`3?-s?^I$EK6kgo5#Vj zc6P@Sb*_Wg*@N?oe81G}!lA(GfU;I3!kSgm`e MLd)d|0Pd+|Sh>(@z5oCK literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/3f/04136ec6f8147f5fc97b89d555ab154a0fa0c3 b/.git-pre-1.0/objects/3f/04136ec6f8147f5fc97b89d555ab154a0fa0c3 new file mode 100644 index 0000000000000000000000000000000000000000..765b699f5a8c7f466c28f4af5284146c1350778b GIT binary patch literal 1114 zcmV-g1f~0U0qt1bZ`(Ey-*f&7HV=gj6hwnoYA~9KsT*l2kKy z=>NVuNu(uNvgOuGJ1lze2YKK3yW@%TM9xv@4fGILTb@b{fC zaI13*JQ5BT+N{D4jWk->)1xDqX4<%|+#*h;;>D*0Yl)FhDv8rry0_)x=>cV33WYwI zeMF*R3zZ?4O|%R4y}^a6Je`BN1eNb2kDT6cm&CnA`IXE2n7NSyz|aLdDURpTW{Fr` zi4+DKyIbljZ4N2!5)*HvNWR{}6cZ8rK9HF67q189Rys&IeZ)fZ8Ga9COmz$i|KKai z!#^lh;P`T-jl??n1j^+GxP!ki!5Rxp;mU5(8*NhIIORWnhrAP==yeHbv*7c5xkS*Q zH0f6S4T7asBXt5Yflul4LZ~>|M)gWs2WlIIR3wPn$ISnlBr;kS^09?v`5gbUC=u2& zADP!>hoSs>4M(hcu;(OzFmRUnJ@)revHg49=whXk{z=Q2Y1On~6hxBb=3XI)0hwM< zjlBvYl{akkXjE+S1-L&Y+>OQ!VMIk+?{pUA_K;lYBnH#5i4DXF6@k9#3QNg0Cc8+P ze+(da)M;4zQU->$OM5N22}w;7h?@Z*8fS6{ykpD`Ez(n>g;9qA!_LBbxy#t7Bp6p( z(De_uy2vxCsSBdmZE%NBUW+?wkR8$Riq6j1FM+?26{7I?A>eSGf!fqXWThKH3@z1d ztOe}==KdD+tT9sIl@!zC&91?|%rCnw(9scaVjK1Htu+x{`w8LhL2jF#{trNNADc&b z4NgSrjjs&>tU5A#{O#bV&QKm1z@w!)Si6(%%`1~n{=8T6V-7O}=#!8mPgVaelRzBa z0^;dpsl$jwZ1j8^m7N;Bq2FMn_o`!z*jYr~k@HUScs-T0BG!(S z?_9yj!&c$RNf6xIHU5|7*FBUDDX8IvGyt1zICxApNAR6+3`wT4Xv_S!A@+07zHSZ= zoxZcv@6osK1!mOx{JYMN4YFS!KvoXSyT^$i5oGl@;GID0K3ty$1bmMs_dIBSXmWn` zqHn429;}+}W^vDS*L@JSkbHkLms0)jnR@8 zs{_n}iZAi96E6Y#%?cMj#r;n|9m%EV_xKRl{tai{G~yYD}XcqK!5 zE0Y$=iHCP&M!S$^cyIS#P3WZRjr3w$`sr7?GuM-`HlBtS*FJ@H>@C|-MT07+RXu-P gPp4NyFxWa2yh-17vqhD)QGHeA;n$ac07g2N4K?>NV*mgE literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/3f/4fab88a50a49d64299d9aa598332944d1a9203 b/.git-pre-1.0/objects/3f/4fab88a50a49d64299d9aa598332944d1a9203 new file mode 100644 index 0000000000000000000000000000000000000000..2250f7f5c630a36c5c8a7a081a33fffb4adfa80e GIT binary patch literal 967 zcmV;&133J60V^p=O;s>7G&Eo^G%zqTF;NH#4o@sf&B!k;PSwjwEK6iKajxaZS9-FU$~C$%!SY>G?&K3?6kh{}$fYn;FW>wwg8f z@(yDyFE*%>jMU~9OEu6e!mpk!FhLa2(&;^cgwU6l-{wH^5P%kUrWxHm^sa4zrFcJBF;A!;)7%2M-6 zK!G^(-==?Z9VyHU<>d~0+Z{Q4+)p3stIU$rTn0za#hOy_JK=C3 zC+DS)u2&D5{(NCw^5wBJL{WZ8Mru(`W^qYs9x#9zTIHUfIPuHjl2+U6D~1&vOA7^l zcR~~vOe!*HJa(uX!a zi3_F^&Q5s0B#G~h`;M6~Md?86iXaY~^N}HB&%+NJ^uNg&Y?Dk@s?T`{jq+k($^$w5 zMfMRX*ZEi0PVi1FePr9c;nleZ(D*JcO@gQ9_+R<=c|I*rcAVJ#u4{SjlXf@uJcxCr z1;BKXnw*iEoDB@k<#QHn5Vr~7>fUqm;SwI#AL(4CFm)xFImHaJkK(J${B^Z9i1Z3( zsY|l$+rMQW#GJCkqD*iq)vew->9@rr;Ys}ex=MZpF8#gn`+8I*DT%p>>8U9UHM;h# zoxY2bUiq7wSIHIaON`xYg{l%5RvAD;fofOvC-2qGl>cKa!_3zB;*Zo%H~u(OwFQYq pC7FpiIhARdIXOTbff2KfW^spnvDN2I)t+%|?d|Z=asZgN!h|3M@gD#H literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/40/f09d8f822ebc96117541c56c6d1888f7b925de b/.git-pre-1.0/objects/40/f09d8f822ebc96117541c56c6d1888f7b925de new file mode 100644 index 0000000000000000000000000000000000000000..c5a4127d1b1982a1712c22dae416eb256e11725a GIT binary patch literal 53 zcmV-50LuS(0V^p=O;s?qU@$QN0)?XD^2DOljQrB#R0ezh)g4Q@Jg+&;ytyi}*=UNd L)FfsAW`Gcrg(?|A literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/4c/0c90a62ada915a4e7668c88b95fcc3725dfad7 b/.git-pre-1.0/objects/4c/0c90a62ada915a4e7668c88b95fcc3725dfad7 new file mode 100644 index 0000000..26da0bc --- /dev/null +++ b/.git-pre-1.0/objects/4c/0c90a62ada915a4e7668c88b95fcc3725dfad7 @@ -0,0 +1 @@ +x%ÆA! Pל‚LÂÚ¥ÎN½Ca¦(釘‰ñyy±hô!„S§ô¤Ì>i] H&}HË¿¿Èx× ^h«Òþ‚ц³s}Æ"ɧB€¿Ðà¬v¬›Œ« :TùÎmÞƒ›»�ûlj,u \ No newline at end of file diff --git a/.git-pre-1.0/objects/4c/e4417b9d46e7ffb2bf1a47964d27675f383d2b b/.git-pre-1.0/objects/4c/e4417b9d46e7ffb2bf1a47964d27675f383d2b new file mode 100644 index 0000000000000000000000000000000000000000..b2e54a81522774b20ec275c2eaf34348feef0c33 GIT binary patch literal 546 zcmV+-0^R+10fkk;PUA2T-E+UfM^<7hK;ncru^foaF z9Z$MBAk=wz^WGb0yp?*(E-ub4e~i3)<%3|I-mQ(boq^GT8vOrn+=v&ww_?rv9jNKA z71n}Q_G+~n_ge`a>m;|9-Eb!cZ9Z;$aGMFk{;gKbKcj(zud-)QTryCObrF2mdzu!q zamFind}2}?!L9=WQTQnF#$x^QY4$c!<0~7f9lK_~&S!P0)er!;?;{xQybljMo1rFl z)`J}-|G4KnF#~M1mVzrLyj8FBcLsX4XD;phh0wR)quWnu5;>k!0o3`0($ADM2IOAA zu5-Y%_z;nc(b#7k!lVEj48kQLcl}AlZ-m<$^*@prqUZVJ2hutK)rgzFYWicH6~7(zY(r28Vy zj3l{J05o@%!SWto$beKq#6aR^YU3q}OJV1)PXk;&K=&%l1K!@nHCAo$zYR3Rh1UQ+ kao@ItSHTgzbqP*d72X?DpLi{`eZ27Y$M5E!U+D&o1e?+m1^@s6 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/4d/31deee871a5835aa028f17e66d28b12e0005f7 b/.git-pre-1.0/objects/4d/31deee871a5835aa028f17e66d28b12e0005f7 new file mode 100644 index 0000000..b4a3afe --- /dev/null +++ b/.git-pre-1.0/objects/4d/31deee871a5835aa028f17e66d28b12e0005f7 @@ -0,0 +1,4 @@ +xÍVMoÛ0 Ý9¿BëÉÆ6a_VdÁ¬A‚¤Å°S¡Øj"D–\Iî ýï%Ë‘k§CóÁ‘Cêññ‘¢½är‰Þ:üü¢$Ù†¬(Êd�•Ö™b¥abe׿ˆ¢kYiŠ3bèJªm³ 93Gƒ+J©Ì½[I^0�Ý='_”¹ÅÖx_O¦GOÑTk&…Æcd©,üŸÏ‰5!ª¢Ù‘'S”˲!9± +FøŒeª&TTÿ,mmâä§þùÑ€…�¼–<§ +ϰëÔ=4d¤ZáeµÙ0ƒ©0ÌlñŒ“m$Cìpc]ðî§Däü>¯3¦ ÷y0@Ðcã°r«–÷­VVKûˆ2N´F¡öAVÈ$„ ú²ÍÉ©MØhlèÏÀ™¿Ä¬Ý?5ü�d9’¢M!i ¹ms@ˆw畆àÊ®Pò2qF¼¢¦Ù™¤-Dp»¯E�‘ mˆÈ¨¼BqÕ�¯dÚŠ `ŠšJ +<Àu»[:Nu ؘ Ü8ORL¯+Âu;UØz0<9}›Î^Nìb>>9»œ�‡ßGóƒýi¼šš!¤Ä9Í»A�ªè>JØ7z+¥¬îcC‹$EÇÇHTœ?I ßܨt=ŽŽ›��8\‰wH}�¡F?ÖÒµ¥e�F¼BCFÃÕ“ª¶Ç»7¢f]U<'TÓ× Á®+ +õëP�ÙµT[pi¼\;bÕœ±-O8[~dÍì0ìgdýÖ¸ ¿û­�óÛ׆Á¿!.tdkTº¸)zƒÞõîoçç ¨±ÎË’Š~¾¾úÉ>@²Eð.•‡ŽdÓÔ»ò~xŽò<@½º£ì]âAàßî öŸ©Øù²À•ûÖÄ»õޤ YÂQê¿)Nkâ´ê í.8™çÛ’öœÊÆE�"¶Çª.Ñ»}�ÔûšuOb á¾hÑä +³HÑBÞÐ…ÿ¶êÊç£ïC!„}óÜþ·/ùÇ \ No newline at end of file diff --git a/.git-pre-1.0/objects/4e/3aa7ae6ef142b35e0bce17f7c5950c1bb98b14 b/.git-pre-1.0/objects/4e/3aa7ae6ef142b35e0bce17f7c5950c1bb98b14 new file mode 100644 index 0000000000000000000000000000000000000000..18d12b80d48671f23f4fd7195b8f944aec93953b GIT binary patch literal 855 zcmV-d1E~CX0o7JfZ__Xk=DEMZ+fynb3z#MzrXfZ*iAo!wwS#9jxwTduJJ?RQ3hlq+ zOXAFlvvx=Wi9A$^>-+AzyYK8<2(=(bNAHhc6)at|C6H9*R2!3OURW-d?){EwSgFzg zHRU2@7M4nHDYuZDlhKIhh0=DX8Ow4mY4w{iMQ@7CflL~p^Rurf&jCSyR5?yc8aj0! zU+ecPkma)g0u~00sc>fH!t=PuxSiGOFAR6Zq)V)R7HVm^F!XwM<(N358~khym0r?C zxn6TiL0WFN^qXMY06E;Saa-sG{(fdM6T5a@a$`a6+QB6PVcDntZ6bKOuJ8x>RqhAP zlz}JB9t}1e?&z7^aPi%}Ih_^d!g(aAV8)PM-OjlwTqeG-98eBE9^$kqAa~3SY1e*@ zM#McI!_-tOjf0Ki8BwwuXVU$wYzbhDW6}U3D8D7iK~k;LC0Jyhj0u;z8F#cWP_u$)o-kv&T2uQ{Qf2f(&uBV6oOO>?DF-;;fkGnhP zbUvM5UPQ)Kbe&ZnUb`5?SIe1TEkTphc8jNw)EmZi>M_MXR;m&rWXafx#Bc0zZTgxt zeLsLaY|wNrI%*)EPESo5x86wpvxKQ*)bjDXLXKF>me47Yr4Su4q0O#j)jBX>Cnzo< zTnel%q3@!V%cRuW2^Nn|C(6@DkDgrU(60r>LB1{6HM^S$Wow`}5${@O#9tQJm;*^i zCv6{K=B`1yopZQ%z(F-}A9@err~tXND@Wi1d3PKUK$Gq%NGB$!+$acAN7zZtVD zr^JXCKp-#N?elU`Mk4_&t05sc*oQ0EG*H!{k9Rrt-f$&D33Y1JuTQJ=`VdD4b5*q0 zKr*JO0H!0I_9hcIv49+=ULP34G=s1ZFgi>6Y$GKFDtfwa-$rfoe?`6f(AJQv4eUI( z_nz5do*yc`G>QF#@xjeIT>-Qrng~A&)fZajpi>j9T{KX1bX%Pf0|Q2UJnYlRL9h6c hn}0A^1pSVK+=~nqd&7!aJC3~D>rMj?zX9bstO&tHn{NOB literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/4e/813b475a536557dfb88e26faeaaa90c228e84e b/.git-pre-1.0/objects/4e/813b475a536557dfb88e26faeaaa90c228e84e new file mode 100644 index 0000000000000000000000000000000000000000..379d658fdc71a1694ee4bfe4a2b1aad1f5a46a58 GIT binary patch literal 861 zcmV-j1ETzR0mW8JPa821?m550a7s`yAleg()DWT)l?0R&RXtUX<0Mubduw}xP~pGV z<9*#O9noy1Qo}Hr zZ@4^bwfH7c+P)}Cm0a*8?)%S(NC&OY8Y*s?He5+ic0)U2GQHx)GT9V@ShiI99@Bh4 zH6zv|=0C<{!vMCCM;j-&Qew_Do=idO(oY)cx-=L|q%}^}g_DgNX>JIYc;sG<{gh9m8)kgozovYe4R^JbUgBB0UUQ3QLeVuohj*iRQp*KoVdRh<8E#=(Dh9Yr zT5j+0jUe|>?t(I*#Ma5+0lY7XoQr@JkyON+NP;_#NegTl7Nfr4bnWq-{Un{aDWZZH zgL<$5pdbZq3+0d75`sCVSc8f+^rz*Q6V11dcWA*S5vYdLB?w?S#^n4jaGVpckUJ8& z(5|T0z}G-}l}_OxpxYHUIJS+t6?Bk{g>nZUGe5tCl?grHDn3U_R?}SdzPjdt5QF-} z4)XT*rWPpU6-qq4I**Yp-!8 zD}-UTPb6hRxH?#!vQEwofIK=VEj%2)+4F>nri1?NWcdB()2}zPa#&&>9Az|zh&(4U zDq(J}lbUirJUoem3Oswc%8Hm9rZ?Po-RH{_oE+F!>etO+G8#^&!|QSBR)&m_uUX}9 zZj1_LSist#FrZs7zf=vV|L%o5@AbcxhTnr5yG1M8#)RBWg|h7q>UPnmN=JmO_~Q-v zqpqeCf<)X6VfRm&VAQg?*Kg;|W+&r7o*cQ0WGX~t9q^k~45#_y4i+B;tcR z+ufZyzms9jgd(or@6f7x!@?$|)ZMu1yGvHwk7ck00pPozSxdFQQ95>kH8#i9V`A5O nc{}kne#vUZXb2M&8@5RORy{e6v$J!z|7Q=JBaeRpIRAy&xrVN| literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/55/a57bd9f687ffd29130601da7c851f6b896867d b/.git-pre-1.0/objects/55/a57bd9f687ffd29130601da7c851f6b896867d new file mode 100644 index 0000000000000000000000000000000000000000..ef11f3ae4e9e96a84994f43f2dfb1c5c99c5d658 GIT binary patch literal 53 zcmV-50LuS(0V^p=O;s?qU@$QN0)?XD^2DOljQrB#REEV$6>d*2sjzpI-IT22GCA#X LB=idaWFHYTdEXb- literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/56/e00e09f253d17caa894365f14d117072d84bce b/.git-pre-1.0/objects/56/e00e09f253d17caa894365f14d117072d84bce new file mode 100644 index 0000000000000000000000000000000000000000..af7a22334769ae807784c8881c2e0ff2ea1892ea GIT binary patch literal 54 zcmV-60LlM&0V^p=O;s?qU@$QN0)?XD;^d;tf|AU9PbHG5`Po literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/57/1820270693f059df21f8ca515f8a47143d1020 b/.git-pre-1.0/objects/57/1820270693f059df21f8ca515f8a47143d1020 new file mode 100644 index 0000000000000000000000000000000000000000..c9b656f28525d03894be61e28ac18f263b42f002 GIT binary patch literal 91 zcmV-h0HptT0V^p=O;xZoU@$Z=Ff%bx@J-Cj^G(ew)yqmOOJq2gvvX_RcTZ=-?svMG x%FT;o=iQ4!Q|OafT#}lXS_ILsm@mrP>H5j| z5FZDJlk;ZYg=>qKAS?Dw%`1hd+*;E4^I|j8A;Vg(v=gddwy{5UGeKABlUZDnng=uc zkj$+AkIpXtxOwL3)F_d!ku~2P%aL^iB&KKPC6;97=Rs^>yWkdi_WS3q&HqmQk)7C5 z`g@yi5mbFhQDRc5bk zcTE77c7(TTL~|eie7JUh@I+tsv}-S2Zj0>xfKL~y7b9i|&0>FhD|6YQu&rM${mWPR zr7pnK?VOrdl3D}`e3Y=C_tDa|C32Rkbh_SOOM8htm*l>;STyJ7rDYc7qIh+(M{tMc zrL_)!pG16M-ZuNu--(ibm^wpCGINR{LHkbGV#{J#^d zGZ7TFNC{+#`RfxU#(VoXBLfo7hF=j}UYX2~Qzwce_q?w-yt?7)vDpSa%+IYiIk|5> z9g3+lJhLPtr6{o+MXODUaKOR#=BsiF7baT$zTx)n*qs?B20);YlA4oRl9~w&N`@_B zvWdK0{nlZJgPuOUJ!Ko$oKJZWMIh;v#C(R%*MBZF$hxfip8oaRB3;j8Y4fsJAS&_; iKuM{XA!IdUQKf`Tae4OPP5#-7Jr_0!UIYN$qDh&g^bJ4& literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/58/c04451c6e7ab13c6c841784976fa314718da7c b/.git-pre-1.0/objects/58/c04451c6e7ab13c6c841784976fa314718da7c new file mode 100644 index 0000000000000000000000000000000000000000..cd5ed194c021f5bdc551e2013c22f5ba407eda9f GIT binary patch literal 307 zcmV-30nGk*0V^p=O;s>8G-WU}FfcPQQE*NyNlni$s&vULF33r&^h?Z5^-awy)yqmO zOJrD=%-&YTW5QMtxi+~n+{JhE=kQxErRHmTVP|}EthC9<73b3Qyl+y z94$^hhNj;qzbMr?Be4WkbrB{jNDLgMS8^p&5Z1 zBgwI=vli`g_)sD<)4*tB%z;Dy4sFGu0o5kfQ!A%)sqvbudHTlc%=UQGosYJv0RR%t F%VOLNpMn4Y literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/5c/5363c25682a6dc8a19262fc63d4b1f123e318b b/.git-pre-1.0/objects/5c/5363c25682a6dc8a19262fc63d4b1f123e318b new file mode 100644 index 0000000000000000000000000000000000000000..b5cc75633233081f02a73fe25dcf2e4eac70d03e GIT binary patch literal 177 zcmV;i08amS0i}-HiNi1u0PkB>Yy&YXSuaBfAr*vlu##3jgJl_6{+*7hKaS5 zrGql+r#EI$Op>%2r>t@yueHj?YD$4!Vn!J;2d4~+of>Z)CL>c&m*UW%NAk%?rzZ+7 zlJ$~oG?_=og3kV18@!eo-n8!o_jVo!uikw;sfOOvCsI7ExyUHjo fdX0AeA|d2}0}AnOHJ!09b%PJDOb3g9e)Le=r}9#k literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/5e/58df6db7c6a757a4f4c99c7cc952df24b6414e b/.git-pre-1.0/objects/5e/58df6db7c6a757a4f4c99c7cc952df24b6414e new file mode 100644 index 0000000000000000000000000000000000000000..5c5568d43b965b6fb4eb5a8a25f0c1511d952997 GIT binary patch literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP1^Sivm4XTOHM#1zy-jb~mTGEqH4SkuFLt l&Mz%WPAz7z%3qxRd1vSw-A(DsnA#H9g--rq2LQbM8?A}9AtwL; literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/61/24496e14f549282ebca2756dfdc87170fb9b6b b/.git-pre-1.0/objects/61/24496e14f549282ebca2756dfdc87170fb9b6b new file mode 100644 index 0000000000000000000000000000000000000000..00a9b19410522a846370bbdd5e79ed95867a1125 GIT binary patch literal 933 zcmV;W16ure0nJ%aZ`&Xc-gAD1AJb{_Tc=6Y9cX&zpGWhoO`ubCfqF1!WLBx|#NEr!|D#F&#enSFpcqVZu z@R~>^kRqJjj7B6$xlpY$o)>@2?3+`@M@Zo{7rW3jB7t+d@bh`|aZFS=Em3cwGb1vk zX!nQ`JjX11fCXWOMMvllT;#CR4N{(9Lp zh^ITntL_xKFML}1qcf~+a|N>frT|}L%d_#d9fvWdSmC@m%bQcqRzxIu9C8*p$1!TX z2mFgwn(!^QR62)lM=C9lZIu?_m#8$xDVGp~t8-vVxx{WkjI%8k5)3nht$?O--UXB? zZX}sNdsax*70wfhUbEC~QHLj80;f^scg})s5d?9jWQ-CBgK;=3{{Ajsca8TV5R)j< z!QyOa%%Tm548q=;*2UtsU|u3}?!?-8rSod@sTTJn;Tdx`-~_>;Ifox-0l3;=LCZ8p zhR=&%X$-da$Q4-;2+XjBPKJAc_u&8P#(=K<)S5t4|}!upsqmkOmErXJsi*iBHm%W z+@A#62JLdXUuOFd@XXwrYkTHy%L+VGTgEn=!yO1=;$BVQ@!{?@>^)k1dy(sT_Zuo= z&#XtcPyca3V9tV`ZL+l{^SnJr+znZ|XE7Q|kYR+e&7jBN(0se(S@{jOH2tye-|2Yf zZK_x=~)5wAJ#mR)_;BTOxpUTs~2t)$OZ@{H6PG?FS)!B8pObircW}o{Av;|mEZpX Him!Z{!Di3b literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/62/cf7d13a08c282752ec26c3b2d935d58212242a b/.git-pre-1.0/objects/62/cf7d13a08c282752ec26c3b2d935d58212242a new file mode 100644 index 0000000000000000000000000000000000000000..ba038f14bdaa99b2de306ddd99a9023ecea7fb0c GIT binary patch literal 146 zcmV;D0B!$x0V^p=O;s>7Hf1n0FfcPQQP4}zEXhpI%P&f0@Zi25ipbxrxrv;S{5 zMmJR74Ky(T0tLOyl+;89^@m@N-|KY0d%j9uWiPu^$%+|YWTB=M8XaJ)VcD)+e*LBsDL!2%={r1CwY|?6H%(t+=vcXXHN%eyzIz0BOP|&8}W2 A82|tP literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/64/e681ec731bae20d090e1800df608dea71e2551 b/.git-pre-1.0/objects/64/e681ec731bae20d090e1800df608dea71e2551 new file mode 100644 index 0000000000000000000000000000000000000000..8d28d6259414cd9da77a3c139fdc467b93c7cc52 GIT binary patch literal 193 zcmV;y06zbC0V^p=O;s>5uwXDWFfcPQQE*Jj&CK&n%`4T*N-RrckY6$}N1OBH)>n$t z*7biat3Mlm!U0{SPiApRYF=s)M2BCawR==>YWV#feQLj6t(tI1=0V^p=O;s>AF<~$?FfcPQQ3x(ga!xEsP0uf?bjd6($Vsg9OUzC6P0cIS z%StRuWGGD*ZkWmTXTVqlA4!V1To^l(~D5~;j_L|OtL5wRK00lV z<31<;{peI4>7Cso*p2bYFG_XJNGw6sZ;`sUk9$t^?klSgTg=$7T)v7;V=r#~hybk8 z*>v^ecrOq?Z`n5&a}%ZJRVFb@Phsl!%qvMP z%1g{ajXbu>&mLSQDTj0JXlhXEPCaCSW5|gTX#l*+} hw;oitUb$)1dYjKx#qh*@7PGob*?f6ziU7I2Cavh7#P9$B literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/6b/57394b6352aaa4db4266a6b3c386148486894d b/.git-pre-1.0/objects/6b/57394b6352aaa4db4266a6b3c386148486894d new file mode 100644 index 0000000..ee372f3 --- /dev/null +++ b/.git-pre-1.0/objects/6b/57394b6352aaa4db4266a6b3c386148486894d @@ -0,0 +1,3 @@ +x+)JMU040f040031QðÉ,.IÍK- +JM²Š‹ô²Ë +ïäLÔ½ðà�Ňz…ÖŠÞÓ-Î8t”dæçA4%ªxæ‰|õÔÐÛ³¨4÷ï‰Â‚ß³³µ,1 \ No newline at end of file diff --git a/.git-pre-1.0/objects/6b/ca02b5b4ec05078120aefde5301be5398f1c00 b/.git-pre-1.0/objects/6b/ca02b5b4ec05078120aefde5301be5398f1c00 new file mode 100644 index 0000000000000000000000000000000000000000..30b5a7bbaf9a496fae0fce7229ae5fe7a20e250e GIT binary patch literal 177 zcmV;i08amS0V^p=O;s>5Fk>(=00M>N#FEtX{G!U_qSVBa%=|othyyNx$DXeiK6b*f z!n5p`p}WMb8dRmZsd=RgtJJetU6e}up5|)2Jh?+$exgr#0IIV50+4yd432ZXUw@uh z78jDBb~jwIqGk5kzh|H-^9w3V@?kDusP5F8z^?x+@A3+pm3KTJ)n97+Dg{xPn_rfS fr0{8rUubaI{|LQk8KX~xh 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 E+nxb+ga7~l literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/78/42c8b4cb8d0742017a95e1d569ce805b66d6e9 b/.git-pre-1.0/objects/78/42c8b4cb8d0742017a95e1d569ce805b66d6e9 new file mode 100644 index 0000000000000000000000000000000000000000..27e36d75a9354775202aed29a8c9efb65b3f4712 GIT binary patch literal 699 zcmV;s0!00I0j*U{Z`&{o-8sKP?a2mK9g1CsqQJJKKm&ALuww05u^C5*BYBdNAt>_S zCrbWOtb72Q4vt}xkL2T{GB4$v+ zskylujrh8f%A9m&`I-yro;j0rwowJVGR2uNdh+$h-6a@xLW%&dp!i}p)#D{-b16V3 z#ex@f?0&v8VLMb8WfpA93ud?!^tpXK1dytr^UZ3-4V{-VTTxeAi$5?=vB1p-O6qtoVXTuKcNKh{Jf;8B)2<``AB zGoF#GWLlHAMllYrsboazW5rX#+UC}zv61(YGk@tf=f2dyTgh`GMObOlLLzc#b3g>J zMdy_^DbRH;WeH4>47KEnoGF=s)>iQkg4rSERBa^`d@0vQv!s^!28u68a&@AifB+0qU^Yth5cVCI*C45!6eCn5-XZk_ zW3&E4(yyo;h*t?&I{WcjX1-s2Mm(At?~oywS=V9X}Qpbi45d|cwZcLy^RBI z9FOFl^n7}#djh2f5(n=sImx?)AEfX_l&~=VZKyXKQsRthAE})<+7A!1_+&9(cn$$S z=;#wEUM&B6&YuVxO^PfRU@HTHhLz1C%(0v3>g(osqu) zkl|l~|K7kfPf}{+i&1uYlJs2AGh15~2FU#j0tp=6LVmdpxE{K7yhasv^$+rLLp>#{ huBE|%B86g`c+Si&G!G}|s%p7xc(j-H{x6xn!p%$lR^9*r literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/7d/3a406e6ce451654b545e18d83b5d5cd49dd4d2 b/.git-pre-1.0/objects/7d/3a406e6ce451654b545e18d83b5d5cd49dd4d2 new file mode 100644 index 0000000000000000000000000000000000000000..7349e3d5735cd6570a4f43b0137e0f55784510f2 GIT binary patch literal 254 zcmV4vSctcFfcPQQE*NyNlni$s&q}sEOE&!F33r&^h?Z5^-awy z)yqmOOJvw^BlVk5n^3|ogInKD9;*+T`F^7|VZAR9kg9MfZG6 zyFT~H`QOJocO=S~*DCJ8V*sk=E%MA8qtZ8oopt^E^M`)U{V)0RSg>gJ1qNSHW?~K^ zy!PcY^z=S`vgkmJphc_oiu|tbeVYhqM78;wU1?z$TgD3~!5u%Ih)6XD~4U0)?!^vP6bOb{F+df1TsCX7Rk&GY{3x4Bqmt93owm mTAW{6l$=`3V3of({qxSyH@chBmoc>^unV31!wvv&tsi%e0VV$c literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/89/ebfcd0801d44aef767f5cea22d49c6669e6a04 b/.git-pre-1.0/objects/89/ebfcd0801d44aef767f5cea22d49c6669e6a04 new file mode 100644 index 0000000000000000000000000000000000000000..047324d22f35189f448a60d22d93f28947d39a1b GIT binary patch literal 56 zcmbDFQnsRX2FeIC^NRZdM{!{FhSa MZR}SWy!iN<0W~ZY1ONa4 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/8c/74e90f09a6d6639fd5d841b2d1a832e901b98a b/.git-pre-1.0/objects/8c/74e90f09a6d6639fd5d841b2d1a832e901b98a new file mode 100644 index 0000000000000000000000000000000000000000..093ee64d9e4f3dc884a54b69e628a4b070d0e155 GIT binary patch literal 968 zcmV;(12_D50V^p=O;s>7G&Eo^G%zqTF;NH#4o@sf&B!k;PSwjwEK6iKajxaZQ2El5{FKy! z{Nl_K2HDtVMIp=oJCAL8!94SS9-FU$~C$%!SY>G?&K48rGFW?#R<^ZK}dwn^i< zNIBmJ=T1SDWTY0CBmzwiZ5=%P;%h6+SfId-)CnOi5l^W;#QRqXDaG*yaUwIak-N|DhhLbos>@ zxB{Scc_qaRDJ-HJ^QWavFS3vf4bJ~o73bDt0asI&T2!2wpU03~6)3lZL|2F-T>quc9rC2#65uL-&IICMd%^xo^5O|J|fhU6udWu_;VfC6nz?1aOC zoSc_Fx?VkK`tyZ#$(P5@5JmYV8L34%nZ+fkdB6Z>Xq9_@;>0h9OImHOuNYQzEG-oH z-3d`xkdv64nhW$d!_ojDd5Lr3nVu256%5!)!?F%{)Iih}rKY78rRD(>4a0fvOCQ?! zBrcdvI6L9}k|e%2?mK3}6r}^LD}p#IJKWMcIcU|A+fHfAHXm*iX=&^9g(xcqraX|- zUt}MVa-Dx=?F8?{(nq%48(y7z0FCeB(j<6lej{QV^>~hg(eiD%4fW}kq z768*lYH~(uayBqDm(N+SLEI*Qt9#GMhf8=|f24Dn=0Vk!Wabnz>~9VJ@GH47dvn%W zBZUPY6Vp>u7;1Fw zTRVLhCB5=DH?NW_+Lsu+*$P!9Fsw3wh62^D>QCOQn<@XtScaLc@x>phpKkndsA>xm qi%K#Rb8;%vGIMf(IszkR8_nVl`C_Zjo2otI*xK9SrR4ygy2Gv+z2Qs% literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/8c/fcfd13ef32648f6de4ba6db9a1d05435c4ea17 b/.git-pre-1.0/objects/8c/fcfd13ef32648f6de4ba6db9a1d05435c4ea17 new file mode 100644 index 0000000000000000000000000000000000000000..90bacbde41078fd6d96d61f0f3f1e3aecfcb42b3 GIT binary patch literal 423 zcmV;Y0a*Tc0gY2lPwOxcVJQB z;uNWQuXHc9>+#OadQxdq!T9>-=Bz=v!kR#uwXn`fs~WGkj_WV9v^2qyh-Yi$g_{(G zS~te}<7o6$8@m-UFV@6CO!MX`ZYHO+Sx{q~^5VYxedGBUy z;e4xXPZK`XU1sikc9y`k&aRF^Q&v)X{)3u(8{-BVE7C_HuWx|1b}iSa_mZ@!cPP)x zP71_{d1OiE9lEJP(++o(t|W9{mVB@b-UgcN4|d&z5+-#`d_oh~ehIg?Fow&^R>SM{ zo1o8t+CA26EKSi-d65HqF`zn3urLjAnRWe;C)VFo4Z|K%h4r3?&`Wdc6| DtrQco literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/90/02f9d05dd907e3e4c73ba86d3a62de8ff19707 b/.git-pre-1.0/objects/90/02f9d05dd907e3e4c73ba86d3a62de8ff19707 new file mode 100644 index 0000000000000000000000000000000000000000..b21a3e79d3dbce808334717f57e3f39e879bfd0d GIT binary patch literal 45 zcmV+|0Mh?>0V^p=O;s>9U@$QN0)^!KT!w#nN!Hgok_xt-^@!1aru}Nm!y8!u{B#fF Dl~5Fa literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/95/1db2564705080a8d51749ab7ca681a6c5fe37e b/.git-pre-1.0/objects/95/1db2564705080a8d51749ab7ca681a6c5fe37e new file mode 100644 index 0000000000000000000000000000000000000000..c082c5b4d86cfa6ae45041a008d407f4d4dd3715 GIT binary patch literal 199 zcmV;&067160i}*RPQ@?~0I7Y7y#SFvSv!#sLQv5luCQLO^CCURk>eoV?a3WzrX&tg7u@OtRt~T8t0Mc6cV`*oKrhB**X|>DP{>6vo|#57%8%u zaWvv>HptmU%zjdI_FHZ6zAo@h`%duE&f}1KJloRfQRcJ}Yxp5OZB*6!DS!#R07ZrhC!6NXD8u67npwRE2{s7=%TR>G{ BVsZcg literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/96/5a6e24d8a047502018a7dfce1b5856e3b613b7 b/.git-pre-1.0/objects/96/5a6e24d8a047502018a7dfce1b5856e3b613b7 new file mode 100644 index 0000000000000000000000000000000000000000..2d47af370908a57dc2051000c434234a5ec34f2c GIT binary patch literal 1061 zcmV+=1ls#}0lk<@Z`(K!fcKnV!R8dB1-IEvU&!Vl$6D8@AA#*6=*f^R#$h9g21Tbe zivIU{hIEMi-G{OCdMrMQ9z7<>yC7JY5N?NX8Vs+X%^N6yLK6_1zs;v|aqTBm*6&eZfzXNus;_2NR*LfbIaWJyx+da*Yd6v{f&g=9KN zqrLAR^zg~pH&;F%MG`aVpN7*P#EQe!-`0MHRncGX{IX-LGTD~-*vhq~7Y5D2S{3U` zZg`R~=_n1PYSjFxA&<1*>wcWh+WpVrY%&dc!>}{!_Jhe}b`=am;}`>Y7z}{3jiq?C zm#PeuE}25mPO3&qG0deg&jA+LWp>Y6-*?ozv^dIJ2n$YfejLm!{CgYuYLJb51u6hp?C{C`bbg4TC{An+9Fu5sD2@ zwStBrbnM{>#a@ROOa+0_b4ejlzcVZT4Rwku*rs)9V#n*xSJ$GHGoQcH2P$`m5_KaL8l%}Q0&D76&l1O$aB8T$Q7J*|0Gb6 zXXXTRs^%4( zG#04HGlPPu)PsUrPX*;~8x%D82q^j^t@y}lpriDr;b8XfSpNkXpS67jU3(}&v6m85 zXpoZ2+bGj5Ww0&EGqZvT)w6*j7MF-w?gqNTKh@wgWrc+xGsdLSu< zUPN|t8#?cH$`arw=N-?%(PwMN_ukj&KB8;I6WZswqTVJ=8UYfSYKt) z=JV-}gD++QF%kSdC?S@v)aK+MRk)V(FEe`GU74ioyvV+A@joQ*Ic#GfEvqoQ5u5e; fKDgTt#%R?<{So}salup?w2bL*{-3`9K+5T%5mySN literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/96/d4025f373135f533594f0b3d187db6bc6c4736 b/.git-pre-1.0/objects/96/d4025f373135f533594f0b3d187db6bc6c4736 new file mode 100644 index 0000000000000000000000000000000000000000..9981dcdedea186543d394e0bb21dd1c7654c77c2 GIT binary patch literal 54 zcmV-60LlM&0V^p=O;s?qU@$QN0)?XD^2DOljQrB#RED0Cm;9W|t|iaEdc$$k#T7;` M8FzL80C>z2|F>QmWdHyG literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/98/389e10e02620a82049013138909cb27e6d2dde b/.git-pre-1.0/objects/98/389e10e02620a82049013138909cb27e6d2dde new file mode 100644 index 0000000000000000000000000000000000000000..1de085a84bb21962f0b07d2328d2a56b1e55e36c GIT binary patch literal 107 zcmV-x0F?iD0VRt;3IZ_<06q5=dBLK1^te~WH>5FigWaSgEh6IIEqECQhRM}3oQ~&1 zLwaIiAlny@AeYuf%k&pIZ#IG#eC(os21kf#TvBQyS0SK^5wK$CV*b9*d*&PKxJq5uwXDWFfcPQQE*Jj&CK&n%`4T*N-RrckY6$}N1OBH)>n$t z*7biat3Mlm!U0{SPiApRYF=s)M2BCawR==>YWV#feQLj6t(tI13Ic->8Zsz`6Ue13e}T7{Y|;JyVuS7arSFTwl_L005j!TuG(2$#{d8T literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/9b/a60f2cbd6a72640af0bac05a494c9d7da37733 b/.git-pre-1.0/objects/9b/a60f2cbd6a72640af0bac05a494c9d7da37733 new file mode 100644 index 0000000000000000000000000000000000000000..003327b9fb89648d47e9ecf44c429eb972d95689 GIT binary patch literal 175 zcmV;g08syU0V^p=O;s>7vtTeZFfcPQQP4}zEXhpI%P&f0@Zi25ipbxrxrv;S{5 zMmJR74Ky(T0tLOyl+;89^@m@N-|KY0d%j9uWiPu^$%+|YWTB?`<(H%uGw`3~nlNd8 zyutY$7OHwi4RRmvdQ?Fb6y)dXRpjO{1iqeX&a-{Hzy694joDgkvs3>vPKMY~T$Idk dF+zIs>`aSAmI_P79gl%?-QuMA z_6CqwOuBOD7a>=c3q!9bSB{Nyy201rsPux)s?~~H3es}Bp+5xMM98th+L_P`ynkbI zF7{bna$`a6v)~eeuvugOG!i^t)%d;q>hQg8%D_&yCx@Rr;f6kxrihe z%oq~&Z!9fn$;5Y70BXV~L!6uh6ppqbVeR)|K-~2?u1merqOTR76D7MzX5H7?mjEU> zBrPC<@;j0pWc4~-fJNHbkZ@@%lR2n660#x8=QTtGboQ49TWNV3)*c(e__@a4f)94y zpE_9x$c8;1)Wm8xhJD|1B`tGIv&7Bg?kPB(j;EIwiD#W!XVvEx7Ng`EA(OJ!GdT+; zK7Q6144b-ReSa=hEkT%PLnjY!7!lo?Y|>7D5BhGWc6KpfyFu)(Q9~Y0ZzTU!!Pqei zyga{{D|R%HIwP_YqN6DE*;lki3?u433B!Puy9Vhjr|{r_qpqSIMvvjB0J*SB zN8l6rc#;r6m+n4FL2IR->)-pNWr&2=p+7PRax|o18zPk@@Q?${9S4#xnP$1$j|@Fb zV7Bu?$fUct7*!l!lf1e4BA8rd>4c&ATjuQADKX<25GYD_{`|Wv+c}_4&GC-j->p~% zojPyVIHN4?%XT^|y0 zzc#P%=k)qC9_s{K-hXkBx?{gvw$O!<@V^Aj?p_Dzq>QCWj@C}0>p|%`YSS5ct_25M bwN1kOuSe{&c_qV#l?sNVMnult)x>7}oPOYj)-MEpux^5C>`{S`T31}=TYL)7 zzG*59GdK8>lbdMaNT2Sk2tI@7dm;+{kW}Kk1czCd3j=)5Loeej-#UC7uT{OWuPEn4 zYqYR298+?Dnr5S#)6xQI6qZE)9JuL9v7HSbbj<|esE5}U1h6cBO$Y=WYXeL)cI;a) z>1g+$_aHizX|NB#&4y{5E{#q)=pdO2HTK3-(7E%u_teE!mt02^c1XyTj)n{PcknYO|p1P$hWdhD5GE`#J$UZXgXBA;9ntY^=f z832WYGPmANq%i%vCR}&P_s00=p?BKH!$fu330si%d(_lqMC6on%db&2jX4Ifjytki zDH~REL(9n&otz+1a}LNL88<~ut?aE8k2QfFhC0Ak+s=PuvF7 z^q7H1mz2}o(86I%eDLpY6cE6sW`$;NO)d)X;nzdpoJ&ok7>UkDkc8jhjgC8DV$UTo z)V&69a{Vitm{}Z1NVVi1ynE1e5 zJ)xXrl7BnvxeWAR7W?%KmS(TGR0+NupSqIx2Z-nlz-x34;Po*|0f*a^10T`pEc>gI zFCJ^jxF!G-e)hiV;n5G7Q~S|3oH2hQCH|)fn!Q`>XDr9uBa~}^JD#3DlOzE8K?wwW`YQL;8+=j!Zj*P>-6^2jA(NQlC{g-t3*WgFy4ObRNi5vHeipcV& MYk%&(0}@JNonyh`=l}o! literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/a3/227846e5d224078a76d9197a0a34cb44c455f4 b/.git-pre-1.0/objects/a3/227846e5d224078a76d9197a0a34cb44c455f4 new file mode 100644 index 0000000000000000000000000000000000000000..fb2327e26c9dca696ddcbb61ff5c4e26d2c2c095 GIT binary patch literal 968 zcmV;(12_D50V^p=O;s>7G&Eo^G%zqTF;NH#4o@sf&B!k;PSwjwEK6iKajxaZQ2El5{FKy! z{Nl_K2HDtVMIp=oJCAL8!94SS9-FU$~C$%!SY>G?&K48rGFW?#R<^ZK}dwn^i< zNIBmJ=T1SDWTY0CBmzwiZ5=%P;%h6+SfId-)CnOi5l^W;#QRqXDaG*yaUwIak-N|DhhLbos>@ zxB{Scc_qaRDJ-HJ^QWavFS3vf4bJ~o73bDt0asI&T2!2wpU03~6)3lZL|2F-T>quc}<1$=AL7i>#hsgViKTZY4ce#t$3MfFOQ}aqQ@^eyBix@iF`RDXcnw1lG!v4>e zlcyqg`gTD*lM9UQ90r}H6HP*ki5jQ%=E+(P@t`eop3mi zlk?I?*Q*Cjf4;CT`SREqqA0&4Bef_ev$!NR4;a7!>e--pz&Q?ngmbHZ$xaP9?wxQTD~o}q2Ao3pZBR56U3a- z0${pGP0mP7&IX3&@;M7Oh}#5kb?-U(a0!p=k9026JgB;o%$#C|{jI?tekC_%Z_Zk4 zB++?um4u*yD@495u_zOqN_DHZPWo-}NO%(ezpj#BflGgH{JtJlNlIdFVtQ%{LyfL| zYp3s`q*wmt=2db<`x0X}TcN51hE)d8P@vjX{mFZEGv)sn%P_MwzW5{c(~Un4Rc%3H qQAuWEPEKW7W=;-JM_|NkqgmV`Uu^YxQ?+LtTYEdav>X7Hh{6S?OW&0M literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/a4/5c1cba928608dac43b552d67c421b79ccc3837 b/.git-pre-1.0/objects/a4/5c1cba928608dac43b552d67c421b79ccc3837 new file mode 100644 index 0000000000000000000000000000000000000000..a51a5399bd9f666b220ebd08bcd8925dfacce07a GIT binary patch literal 99 zcmV-p0G$7L0ZYosPg1b7U?@mT&Q45ERY=ay)hjA4PA{+iMbh3eBk)}W|K@Ndqpa$%usEy=U(9+svO_2gcDK(0` zr~l~7%9TaQiX=C_6yb@`&h8Fphtyi?HM{(H`RQHCqaEKOi*y1e%OWFEE7aEQpSZ#A zI?oUyZgH#4zTRLg>{SqmB-O?;g%);uZ3OVRKxK1-VDYDgiFN?xzFhqiy3r=#7Vdb0 z@yg{+wA7|f(`F0ne76%87LJP%T=vCWCt>&SMe;rNCJROU=p-|X$o^r;Cqv`**(_$c_#YjVp1fKy5vD=hQ}+`WGAWZ0gr6(885rRD@39p_UT#Et*D#9k}&fIH~uel?1A zD7dGgXVi3YKySLFe8tz2^Z4-3Z@%OOvg*i8xoZO9uqz;tUn&>TE0tFYWDya?JG{_sM_@wtDVatt|F8@Ry)_=U#GWc`1{b7 z{M*y|5F9jllY5rc!*F0Mr2<3+{+DehWy?3~(~=#Wv}rSgUVoi7>xUk*mOY1Sl|MLt N9iD^W`7b&uLb715Kq>$L literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/b1/000215825dc6c9bb3a0a6a5d986fe653eb2da0 b/.git-pre-1.0/objects/b1/000215825dc6c9bb3a0a6a5d986fe653eb2da0 new file mode 100644 index 0000000000000000000000000000000000000000..b1b74725e14b1f4338216569cefaa2b11a248ed9 GIT binary patch literal 1488 zcmV;>1uyz|0nJ%UZ`(K!-gABh(?j7DEsMn-dME;{Vhf2-Th7`}7Ci;B#5jUw(JN9Z zf+qicIiyIDdKgJ+7tz6%$>GfKo8dg@Wk#3i%U@sq{9_x%>u5z#OgFe-EH2V5PxF;{ z{}C1Bj+TtznCADSU@6VN9v!8dEiL#?`h;vLOF2#=iidZE@sT(E`qG8}YVoh;a7~Kz z_90*|Vh~51tZ4Co^~;9jB_39z6Y=9&JK02Ojwj;d*((Idj7K?Vcs3vE_h-q$UKr zWk%yQK7-HxX=&rGX_E7lKj6zOda%&2*pquff_?bBi1H-cMKw+tC;2Xlt&~%V3vy11 zDCUxRmvX5%S2+i7^ZzT;t#CCy&nVwb8gR0ib8&3D$P`#3S}rrvi%Bgu&aDt9ckz)&d z;e{iRsFtYDg7C5s!BCGq)jZ{HkTktmiPf=cG*$ZTU{$MnE{Is{H z=80zhKUcxbNAuA4z6IfVJ+(J!pA63rpKDaXQpd{1IA!ykL~D_x1}AR`oNI3!jJ$=9 z7T)aKUm!nR1dH!xJBP4H6C&w2;OvWsEs@S_#A{czk_)cPIl56A-<*x7!*6dA(hGk) zLczkHnEf0YP7`I(9mx{-)p49Fj}(BLKsq=vDr(5}Hy8#O1vwN3D&91rk(Tue8v;Z( z0MT1A;Lr<){uo_*VK5$h$Qv$#X=ngCv<+2kXM_)tq^tt5N{tzzudzc2--qY`GRYBdljshf$G+M0t!1G2{Cme13q3lCTUk0ngul8H6) z&A~+xt4{&Htj^l${E=u7FMvWD+ZTYelVAKo0@L4S;6p>h8q|6|m@# z5Y+;HD@GP%)~ge?<*r-arxFUYBX!S-apQuxj)D!kgZ(K6?AQ*x+PZcChB45)p;Aw_ z0qO>&lGAW23luHD4IVHGk7 zwg^4iH~gWis(=mJca|7f_S>+>2u*Dpg7qzk0mGUWy|F@>z_W)%(<2K!d#5y9<3S4XjLNqWoG?VSp@@-Xz)#+UN`({2u&<60j& zUHEnc?3!rL{fKf{Em<9Fdnel84{g87ebAY>#FajKV8h94*I3=QKv*H({pSX= qGLFSRIcdy?RHMm1Zl-9{36J^c?7d=+4WjoPaK literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/b4/1f03b15a67b056cd45f3f9f82f6cdff46f9e04 b/.git-pre-1.0/objects/b4/1f03b15a67b056cd45f3f9f82f6cdff46f9e04 new file mode 100644 index 0000000000000000000000000000000000000000..7a409be015dde61b711f41e82b7e3a0da7c08edb GIT binary patch literal 1289 zcmV+k1@`)Q0kv3BZ`(Ey-gAD%)i0HoMM&c0Da)`nHP!$LQp5?00Rsv~qHQ8FsghLE zV90+Tj}q;ZMJw*w_`#&a<9FX3kH@3#3Uvp^ql3{eCCl#Fj6p`2 zK3A3DX~ry{DgCtU@LbrFogJ|#mA1W8S-uc5_5V3j>1~-itg{C1!@H}K?*uX27@?#| z1IE}kv*b{L8naUrWNIJ&pb+%3X$D=d>3S8b>|)-E0{4rSN%e1j?M`xcA)vWuq?Rqp*0Z3;NKlT{3m7Y z-!$+KO5~tqn?kaLMCA6E2Lg`Vz0@$MKv6M;LIWY0*ca)@*!1H_sZv_**G7!|JBHeJ4-us9&U6rL{X0Z^VLMilPuElK4;y z{&r!s?|w^4RP$6wRycBU27IYClBfeim!Z%`!jPiX<&IC?*_`KZI9!(njbLVoRS6Zo!O~(0t9V4H4q&P{k7vMybf(Jt#{u9VcPDs zj{!P_eHxMLWB9zLm&9_fUjo!>BZW7#eMvc1n5#QO%C%NKdw?SM9oke5`vcshAY@rt zur5cqs=Kmje^~c1f8HGKhx-@stIIGQ-%-4pdzux>a8jp}x^c}fLQYk8gKToaU@ToK z@i`Wz%5{X~u-V#ONJ2Vx$?>3DG6r|uoWuybB}4L$ZMdf!!6?bSCD18j=RG}?DtFjF!&5sk5PJzh-wzjNJ( zX)DD|tahJb-d6%Y1$b|Se)k$A`6IOCTX!D}y#z}I0jIEk;+o&#*fqPmErl3eHAo$( zT{S2XvQ%^8CW6KS3g8jq1O4x6n;lbA#c_^$psbXP^HAtU(C?t;&7& literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/b5/7489f9d18302c2317d0a66c825f4b607e34634 b/.git-pre-1.0/objects/b5/7489f9d18302c2317d0a66c825f4b607e34634 new file mode 100644 index 0000000000000000000000000000000000000000..730cc5b67ea852904255c68c9bcbc6d155e4af4f GIT binary patch literal 1828 zcmV+<2iy2~0o_^MZre5#-gTaW^+gdkE8AfmkS$)tskUHcsUt zm&uf#@1j)9RFMfTb1~o9*pTyuO7pdpm%|Tc)=n4txk!qciYFrFm%{=5`9=TfHdjqV z%xih48e|8IMK0rvgM65i^6&AtlfX=5nN$gXTgYMg_`qp{C?S)loo1J4OXIju6Or?q zrAj4_CbuHVi&XGje9HNuqJ>K6O)VfudacrVl=FAdTuiQL?xBj+3YSW!d{o@r$ebVO zTg}iK8AQ2AWfc3y2!qU*{34E)mb%ttnE<&;m;BT``S@65X4%%0%|#yRB_7a22hu^b z2vN?X1*hTPq_|tf!0*v*#IZE|OlD-~jYTnv<(Q4*D9adpD}y()KQ}fQUDaroM>!E) z%Or}~Fi$DY*x>lx`;S+rS7*m;m-Y0_9`S3>x>a(*)IubidJqJ-O53u9Hu3k)kW468 zX?3P#-_waZR!KL*Z~&J8lNaQrnq$Ax0|Hmx&#Hi6yN+0wsPc6_6?qjjE`Cs(t5l-J ztY6s!WF`hPk!xEW*7~*C8s$zWHOnrnV2dy_jCNvoLB?ydsZ9!HY&5n1Gvq{%Ny`Z2 z<5ZB!HFaA87~@LB9kX+4n6jj2NjhunBQzbQVXyRG*T)SQNm_Xc9Du(Nlm)PUfPU% z6vL|^vL?QxZZ9TT@^ z_bO>)!0&IEhRe~jr5q@l3c`gYe4JJr-sxS1v7(JwQV1(@!OOA;{+jF{vtcnZjdegr z2Pn^q(W>mMJh~wc>SLEhwVZz1Wd#_ZiYa%X)$NI62q;`Kc(lR*l$nK!7K?aUEtG!? z0DO+#{xSh@4&vsL=}w^TiuV{bjJ|pYaSp<=^*Gtul>!O8|Z?8mWx{Q-J)4h#PpF2tD56EUE1OL}m>oB2zg^8oMs)vIdhxHp_|z|4^ZwLYO@fKQ14_pgIGSANzy&1Ts#P~}5U{n?SpPklFw4F^e_lJRO9Yk0tL36=mqrH_wWFV$o}C>ZeH`pxI8s_( z2t?hsi9wB@=#8kmdvk=^TH{$(&8NC1y!rzi9X#oKBdC1s`(wdYk~rn3>hoS>#UEj! ziXpVYcf&w^FbHUIYXptd9kg}L*>fiK2;gNqNF7NsAxMF4q*TgTSvxAMv{$jiSIaeD StWX7NZiW+a`SK4pm5LHp{g5aC literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/b8/1e66f6edf51af69ba071ad12be19b3708421bd b/.git-pre-1.0/objects/b8/1e66f6edf51af69ba071ad12be19b3708421bd new file mode 100644 index 0000000000000000000000000000000000000000..747d2bc1c2fb9b0d51a4489e0c42412bd0548329 GIT binary patch literal 148 zcmV;F0Biqv0V^p=O;s>7Gh{F^00M>N{DR7o{NmE2-JgpP?WIqkCbj_i5*H;A!?CqOi9dVuoc{0u~4u}wqkkT!aX8y6c4YG5C;Gi%R^Wr CD@xk{ literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/bd/80165fccd781bd1f1cf58b51ce0ecb228396cf b/.git-pre-1.0/objects/bd/80165fccd781bd1f1cf58b51ce0ecb228396cf new file mode 100644 index 0000000000000000000000000000000000000000..dbd96c0de20e445fba0a3948bae467104c6fea2a GIT binary patch literal 543 zcmV+)0^t340V^p=O;xZkG-5C`FfcPQQSdBD%`J8+&CE$jEz-+MEK6jNz0!WCfm>j| z5FZDJlk;ZYg=>qKAS?Dw%`1hdJX^IvCiCcjhO63XHCM_Lwux|DW=B`)lUZDnng=uc zkj$+AkIpXtxOwL3)F_d!ku~2P%aL^iB&KKPC6;97=Rs@`&Iw#u_Vrs3&z16k(p^uk z$TGI;L)C{ACFT_;CWF*E=H{2?l{l4_l;r1mB<7{$z^!X@$`g>fCF{u%)BSO({tMZ8 z*935BM|i77H23k(himr-PxNI^yY|xMw#e=e_;jIqF=BSmEcUmzGM60++xpegzkHQn z>Her|bQ-w3o_!YtBmC5`#b)qqzll$h= zp_n?uGfOg3iW19FwA!Qy2OMl~zAC41VWQRV8*cB8-I-xx00astsX3`7shPl_WY{7m zo5;)6Zyk0x=;_njQ?_x<`IHAy1d>ik%xCC){pUi1tjoIZ>0i$+()B!+HZO|>q9VTl hl$44YLRK>tRZ7SdmuDZ|ynuu^lZ5H;lu;Zt5%p~(C2e5( zJ^Tk>hSttHb}csr2K*w~dv>*ZbhOqah$rODyVm<>3G;8*j1xZ&sZ`3BBGDq6nfWb~ zd>$_pr#{ns7RyyW;Zvax8x0XAvDA;chCEu#<6z1q9SnQs7B@FS(+}xjv-C{XQn0{g>d!zbdmq`2+% zNc3o)bVl9N%fXj%_oFu&_srYC>zt4K-pQx#pjpWX{oHbm_!-95e!Z5Cm42;~_y|I4+IBeL7BT?R|T@i{uth=ts7DUYV=O6d9a(l7*$&GE43jn2G_ z)A6X=>z^ByRd*i25660{>n&8rpc1E|Ce5VwqA9<#hy@NQc|rDD1+9SuLw46UCY!z- zV|PK#bLw*u)HCBuW7BiEyHP7u;+tW0>vp^{2~|MFx~^kMAP;-P)9CHl$Vj#{V(>(g`rih Bgbe@y literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/bf/8553f0fa63816bb36aad321889d9aa18113045 b/.git-pre-1.0/objects/bf/8553f0fa63816bb36aad321889d9aa18113045 new file mode 100644 index 0000000000000000000000000000000000000000..aad73d4680335622304dd044492971ba167df51d GIT binary patch literal 208 zcmV;>05AV|0V^p=O;s>5F=j9{FfcPQQSdBD%?&O|OwJB1$;>I%%StRuWGGLopRh=7 zvz^YdpWHl^8(RLTRNjLs_f5?!bu2B(cTUYKNiA~BO9@C!Pt8j#$;{7#=$&nzKi4OD z#>S6orR57+58QhC<^M#e-k@NRZX|mquV9Q$=-PZFeW!!t6{$b-rYwK32uW>mG05PAyS?09+iXT*YSZYx*&RTdhxgH`L{7H()R{FfcPQQE*NyNlni$s`M`?$;{6y_D#(z)yqmOOJtZ9 zm8WuJfqQ_0#Pa*+q$9!}Zxh~*TaQP6PD*MKL}!+}?v~B_TNmfXzMQk-@^`_TjK2=x n*6EX3T#}jx(`(NnoOkSpNPYat>dvd7t3|!|7aRrvm6}FrpkG00 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/c1/9ce9ce854396c1daed26e5fdf5066f945d3c6a b/.git-pre-1.0/objects/c1/9ce9ce854396c1daed26e5fdf5066f945d3c6a new file mode 100644 index 0000000000000000000000000000000000000000..7b0f0fe64ef14e9068b0976fa5f4d61ddf354e9b GIT binary patch literal 386 zcmV-|0e${>0V^p=O;s>AF<~$?FfcPQQ3x(ga!xEsP0uf?bjd6($Vsg9OUzC6P0cIS z%StRuWGGD*ZkWmTXTVqlA4!V1To^l(~D5~;j_L|OtL5wRK00lV z<31<;{peI4>7Cso*p2bYFG_XJNGw6s&lqbjH?4!A`sm3zr4zAlT(A5xXv3`^5r9=X zn~vVdiF;uC+Az*1C-(4};;NVU^`Y9k$@*BH0!P8s;6{xRy&|j^)&BVg%UGf(WgIzVxZ{YKeO&FSe~YGI znt?scUO4`p@w3uxV`bx)|BrcGmuB7N^}wzd5nhqCk)ixaX?rsh)OK8nN!7h#Vq}0@ g52{2^s+B^B`n#YH@L9eqOOP7gs@PQch;FLUK-Gaj}APVo7Rxeo>`sN@htgM2$iHJEhTv}qk@#@EzSE7n*}^O%7o*hWo}9A50G zO}?l9(J$*Bke~n(kXd_@;z7J%v3qv0yV#{>Q8Hsc{rKYhZ&ES85m%DUlO@mce4eSa zQ1KPr--%3KCuJ_VD&%r!YfCNDBr7&jo=@MKRXcs?mohG|lV~9`em))3!>{_G-`Zp$ zBi_h6(I9(ZEDIIo9OTo2lz)fEUIKHO=PHT$n^H}y+XpTii%+K z`qD78X2znBnG%t2jxeZV#V3(iS?XGgRSe`ww&Ew|&d0|hGuyVAY$*$&w|Go9JxIqQ z4N)#d%4zy{CGXZT@Q1h+99zRrRZe!^O3PWK=4>8`JZJE&9Nx_S+S+0?>e;*y1rc4U zSVU}EWE5v?eDwC+hl`Vo(<8Ra272Xy_;pv^CThWwRL0wS5(F5PZCR>K{H-&kVhUE; zoh!2M$-F%PzFf3xo=g6Sv+=z?<` z$7DpxD^VmfkLy^cN9{kynsg#!xoz{JssPdnoS zv>8qoGB0hg@PVcHr~|5--97Ne;-gxYODyOE&Dn7Pu!RGi$0)Qp*PK9w`9BYDSG8ER z4o{=HeTDQeA46Fir=y3NU;9AwX2U7wHye;N0&D}#k|dHMX4fL0Wb#%~k?ygVHsfoG z;dKyM3*S<;7h3en?EOw7-bxBTTMTu=aGaXmnFat}!hWfIypuFAsmpIY?*Rg{X+PU9 zmF^E_xYpi}iLe`Bse_`?0yAdV2E{vdNvRKzcXwG_Mo|Ych~^1Zv~ejd6X3O#r|@XZ ztnz6&GZjieM+Yd+%h@`9w}Z4qxq)0#A_yh*1V)6!Pb)I(&0fj3Dk5(9f za4#KL2Iwk7OP6PmcXkdxq z?68Bins*bMUI90={le>K4qRzoIKW;}5$@24@ePoHj{w?1{~IE$&fi|15NIamz0_7zJGlK4_x{f7nnRo>t1 zv~5X)MO88I{5rXNMi2AkR%WYbDz2J;sxJncoxIJl$jYwkw2AOMbS>D^(N@mUDl=Wh$#(NV-O2-RRMBVPq5o&9VdsP>o$tB^{ z|71`Hudl73@|Ew81zStvl%MMVNm@Jp2ou!|p$-0k37iiG0c~!Bpq09Vwr)6AO|WC; uM*y$NL8?gN1wjf_Bb8FFNDH@>_G)(c`)9+af1CmhHxpmP<@3Mn3-Gph^hb37 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/cf/644a4ccd8919db1e93d58b9cd94fa122cc0aab b/.git-pre-1.0/objects/cf/644a4ccd8919db1e93d58b9cd94fa122cc0aab new file mode 100644 index 0000000000000000000000000000000000000000..6147e72e47687bf6c52a36e69a993ac934038323 GIT binary patch literal 564 zcmV-40?Yk)0qs=ZYuhjo-n0LTBToqo({-?yQbuVEE3{j;r0lUMvPiYsk|!x$!^r=> zlkJnM*vZ!Jq0mi`$mo9Gci$}vy@0m|hwolhjNh`Q0Iti_Sj&y9oK#Ev{=tm6(JL!b zmX}gB|2fk~Ng~Ti8@JacXO1lx8c*Ag3#KrR>8!u8JC@q-MS7~065L6xj>vP6T^dng z9{J2MCrY7QUuE|BJiF%t)AkOMYPBdN2VO91;i|$s#3}xk+N`H1pWtVb0G?LMqFYqH z(=vxut$TsGMzUgDt9ey_q{3=jFK7AdNH%i@8wO=-Sj#39#~Zf_SSlPxmR>j-je2ia zm(!DZ1_6NUHnbGBr#s8$Av7Gr`<}wr580Otu)ZN7M#q-s*W{58^fY06mbw<5I)DCr+14S~XJ=hNNEvg`yk52xZe7-IE}RVD#dU zS89c8a2<~ICY}*;9SsRRZnq=~a;DsHgu~$o-IRtZe4O1e#J%7vCmNyNAyaUcGGl6hxa$BHs-hCP%> zV05GUf~I|F$xy*`KW6EW4c&eTwava(h}7V&A!WMvE+$f9WH2!R0)^bf%shs;i2J$Qk1Y>h^5x{5nv+5IRkk_$0RR%J F5J$^N6rlhB literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/db/bffc4131e908cf5c674803cba45031195aef41 b/.git-pre-1.0/objects/db/bffc4131e908cf5c674803cba45031195aef41 new file mode 100644 index 0000000000000000000000000000000000000000..6b5dfe2bd8da0573c824d05bdfb81d953f9e34b0 GIT binary patch literal 970 zcmV;*12z130V^p=O;s>7G&Eo^G%zqTF;NH#4o@sf&B!k;PSwjwEK6iKajxaZS9-FU$~C$%!SY>G?&K4B4lcwr+XD%HF83?(b6r z>8F|Fi;EdHx=s4_y=cpVC)cu0GMjgsH&yngLY3y{<|gK) z6f>}!g|qIA`o2Te^2@$=g%8d5UcLh}Ek7?UGo2yE(STJoZ1aM;oU3cs|4G;N#V z9An|yv*0`z;k@3m71rW zhZvEY2#m{c2?cew$sZ!`EB-hY7~kbCVk@8kl}^no&B)J5NiAaNZ0DcTKWSD@+zIx^ozGnvyqlnAe0{dK|hSRC@1q&8Ald5JU13%QDjwOF)6PCU(N% zKu*p}A6>5=H2wL)y5!4aXNaQwl8n@%oXp~q)I4ASGqlP*KXKxh!zHb@*H;WHI+hj+ z{O*J(EXYYrPR#}Sn_+2yki5jX@J!E$-3kV5rD0izJ8B?mic-^3i&FD|iH6}k_oWYQ zd=eK-C!C$|en}GF8}}VEVT#g$))heQl$exEEHt2toGuS4XtW=-#5E|vhz?27a z`itx%Qm*r_texPUSo+Aed&8@951{c~T$%(=%{%1MzPWt(_0~zhEglI^;{VrG@+)xZ?~UKrqbf;B%uP&BO<}0f zwQue8U6l07-`u=Pu4rFk>}D%emB6sd02&HZyQ)8VuWqLNA7dG2w#FBKq<*^b$Dyh% sNGvMJOw7rtOv}v40qO{hm~AwRJLHS4K5we_jALtWhnJQE0Q;WA`R#%2)&Kwi literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/e0/249262d6f4ccdb5e61b031b3a662527b9876c9 b/.git-pre-1.0/objects/e0/249262d6f4ccdb5e61b031b3a662527b9876c9 new file mode 100644 index 0000000000000000000000000000000000000000..016b946c3428abf908076a4ce5db89338da9bb5a GIT binary patch literal 1141 zcmV-*1d9830qs~zZ`(K!-m`zj>?QDHtt7iiv1sf7!3M<^XpjOu?3uP0o2?!ODaG{` z`S0aWqBN99*)58m%0ncJ!fHo<>rswG_KTWE=gy zXOeI8Qt?O>JiQr>M7qmmaa7WX$1IQD>SgzLk2j|*O!Js0(SOz?E^RG-WX~)r3z0;3 zQnJH4p^8RnJ6C-k?aEam*04^PQh<8Yd$ti7D@2~bm(d9HsAW{4zpg=K1#Ecnz&?w# zOtmy08!42;f%9ut@J%icZ(}nxv6^rm4KEz%w}2s2uypjGY#ozG+cVhSaCTordpiA~01bOx3%zr1mz%1j5x2n)e9GT z?A@Utf(KS?qm+I2N0~;@qxX-XTDy>L(;O~?@|0${_62yNI86epv8C2*Mu=q=wN!m+ zUy-%>GnY?EzDK(HvS!?Bg&AC3P2e1^u8Dfdi&AC~j@Cs#7M_4<D3#dfhy;g7o>_1+gt?sP1@m42Fc1M)G<-ZKw-Vu*bV86N=27H}A++EF!R2`Xbz8 zw=W4LS7lQ83NrdQl!Z7?GVy~xx%ExsZ&I;QVjv0YO45UA6l>S$J}sBEt24Nqcvs-6 z+L>V7Q3gj%n+kFh&T7v68$NAZx#}0udz^;2gk;+w3|~$W=Af$1Pf8}7p28ckDJ6%z z)Hld{4=KwIKuRz|QLtst)tQ8A%$Nd8BxmsfR-9+LGssk#@)%YJ*h&5@boT(Z22@;) zTvw(oVNszu6|EBYW{T5>FXnWtmE(P(y20YKGpv0hvM|QmJ8&aOrDiiPcc{I8tJ`&e z&ZzY}DUC}pV|%owjtJg-1Lv=t-6GqV6KzZ$-ib zJzxiV_r^dYhwn!kt!6hDq%uWH{I6R~2dX!VY4vxcDT=n@VSnyk*r}X-w~&GgU0}GZ z8$bMJ)nLPfzv*yeIG=Y;&<GM1uusNZTS$r_r=46uW(& z+cVW(Td*cK+O3p*>Nb=BN89?}H2U98{Ty~MP2GkNi)pp)cG>4kk0N#8hORUugb0df zu?JF>h$0Jfrvjy$*z0h~Bs}!+8v{jY6u{mKFx6VF@V<8hWf-7#zNfzBx&@~r_A>ek H+aQmtX_qxN literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/e0/e5d1cc99ec34272576aeea559fe187d6b8ba93 b/.git-pre-1.0/objects/e0/e5d1cc99ec34272576aeea559fe187d6b8ba93 new file mode 100644 index 0000000000000000000000000000000000000000..4f387c3f853aa442a892f81ee210a5bfe46efb3e GIT binary patch literal 867 zcmV-p1DyPL0o7JpPunmQ-gAG2;VG3SYd4+{(^x@TCDPPKc5rGynf z)k~><;1|}|q8On^mMh^Lt5w07bPJ5aS1|`FtiXj~O)9_~c*o+}?@ou|^Qj(|a%E$D zY2=t0-Q<`xe@k5k#IMUX2Fa+rVc9`euJZ|aLY;M))Xoc?gSlam3=@G?mn@KScr5tB z>f^X}R{^H&(*BnDC>QiOR)vDB+p=K>-eNDe?d3*$fk?ANE!f>1Z$9h~FU}Lil38Ol zP>YK-ZdDmG$|G2I5=DahtPF4nrY)1 z+~xpd#K7{Yup;+h9Y0LWZ1W+LNp@+m7IFGbcuV(L2|dfw4kPiGqqBE29>mDg&x*_;2OeoiAOwvv9z{8ad|mY7g@lNqnE zl!(|fhIKPuI1Y*0G1=Y&J0rGTxp4+mM;!I-&@AF1nRR)tK-i>%Yh(7p*z&OEW&ye# zPBl&&soMsUv`?*db`Pt!Nv@wtC|+itPUEg5xWWAw*Al!#HNzIe-&5g!RUMY4g9c>^ tO>$9b1ezMC?c$P-oQG0yuoc_H&3}4fd5~7p6e;s&mtYOt{Q){muNm_xu!{fy literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/e2/0980d6d4ddb800eee347122f6315eb3889d6db b/.git-pre-1.0/objects/e2/0980d6d4ddb800eee347122f6315eb3889d6db new file mode 100644 index 0000000000000000000000000000000000000000..220c8ec6d17b62da31543f18fe5d19da5fb24a99 GIT binary patch literal 544 zcmV+*0^j|30V^p=O;xZkG-5C`FfcPQQSdBD%`J8+&CE$jEz-+MEK6jNz0!WCfm>j| z5FZDJlk;ZYg=>qKAS?Dw%`1hd+*;E4^I|j8A;Vg(v=gddwy{5UGeKABlUZDnng=uc zkj$+AkIpXtxOwL3)F_d!ku~2P%aL^iB&KKPC6;97=Rs_EpfV}x+Ltr8;}SO*ZeErY zR6V2YBvgG!QDRc5bk zcTE77c7(TTL~|eie7JUh@I+tsv}-S2Zj0>xfKL~y7b9i|&0>FhD|6YQu&rM${mWPR zr7pnK?VOrdl3D}`e3Y=C_tDa|C32Rkbh_SOOM8htm*l>;STyJ7rDYc7qIh+(M{tMc zrL_)!pG16M-ZuNu--(ibm^wpCGINR{LHkbGV#{J#^d zGZ7TFNC{+#`RfxU#(VoXBLfo7hF=j}UYX2~Qzwce_q?w-yt?7)vDpSa%+IYiIk|5> z9g3+lJhLPtr6{o+MXODUaKOR#=BsiF7baT$zTx)n*qs?B20);YlA4oRl9~w&N`@_B zvWdK0{nlZJgPuOUJ!Ko$oKJZWMIh;v#C(R%*MBZF$hxfip8oaRB3;j8Y4fsJAS&_; iKuM{XA!IdUQKf`Tae4OPP5#-7Jr_0!UIYNXcu2j@gb2U@ literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/e7/81d97a54ae37d929e3204da59d9671c68223d1 b/.git-pre-1.0/objects/e7/81d97a54ae37d929e3204da59d9671c68223d1 new file mode 100644 index 0000000..022d747 --- /dev/null +++ b/.git-pre-1.0/objects/e7/81d97a54ae37d929e3204da59d9671c68223d1 @@ -0,0 +1,2 @@ +x=Ê1 +Ã0 @ÑÎ>…NÚ¥KÇ�-=„¬GÔ±ŒdSBèÝ›¡t{ðÌáv½_*Ò é6˜;™Ô&%�~£ñªÝy lœÔö?x‘ö¡ö˜…€2ºÃø›¦³ÍjüäÒgñÆ… Žð _— *� \ No newline at end of file diff --git a/.git-pre-1.0/objects/ea/9c5db9d386b871a83595de63c78767fa9927b9 b/.git-pre-1.0/objects/ea/9c5db9d386b871a83595de63c78767fa9927b9 new file mode 100644 index 0000000000000000000000000000000000000000..93b6b9cb1822c5572757de6b119412d76d257400 GIT binary patch literal 240 zcmV9G+;0^FfcPQQE*NyNlni$stm|UOis;B%`0(n^w-NuEK6kQ zo3p{=v+!lTj)+BaHx+g2j|Y?{z%&)50=2=k!gZVq{UXolXy-dKHQFX5FxkZ?dBzzO z9l@nZ7@7hvv)HzOn!7;q?n)Qttc{y5WpJ;8Y6>VVN>2?-EXqvGD=CKC@=&uakheFX zJ?#4_-Kkk!Z_gguZv)j3T9AUxUFTE0e9m@C-j7Gh{F^00M>N{DR7o{NmE2C6eaBZBc7vtTeZFfcPQQP4}zEXhpI%P&f0@Zi25ipbxrxrv;S{5 zMmJR74Ky(T0tLOyl+;89^@m@N-|KY0d%j9uWiPu^$%+|YWTB?`<(H%uGw`3~nlNd8 zyutY$7OHwi4RRmvdQ?Fb6y)dXRpjO{1iqeX&a-{Hzy694joDgkvs3>vPKMY~T$Icp dz~g=7nkkdclDLT4n$te%lYhN)0{|eDL!cY^d70kv4)Z`(Ey-gEwnt6yp_i;$n#LzZDlYODbgq=*v~0|pedMB7AU(j_UU z!I1xbJW8}rqO5pp;|G%xkN16dygQN_=V}ZmM<>7jv|#BYn{r6iJkiFaS}d%PQ`diD zn$J{Wcw&li$}FEM{hSEP=jL>0N6Z&W+s(w87KR(+^^A&f;4#dE9hL8Yu(}&2on!S@TIbH1naVS+le-a` z_R&9VHMg)LH-4Hi4)6gVR}+< z!WjIs3D8)8GCl@1OjM@1Ewprg!w3Amth=656<7`vJ$IG$2MPaLu-w#5 z#i_l~!^P$K{qWD*yT85+KV02^xxT#{_ExI@8+z#r!|f&7ljl5(5v?xxT0OC%j7C`a zpoFuP4AR73zZ4jh%Yh#KJX1c79L#_yYD7?#>`)bh7R~Jws&q!6N=0l;$qXveDEc79 z*Mg(ZBLgT$^CWCKgLU+ba%KCmw^L>~9K+u4H1GmyqdK~($>nPte~D-XZIyq}2vq#4 z2{?~L9zJ@u2M0)(yE2Qp+s>z4-NeMN>yD}NDH~k zD6ABo+@RX-F!Dq4y4s6Y`)X3N0EKF^@deGFhKAv{h0qL7VQ~hJp52Z=Ptrnbw=v#} zIlmEkE=)_!Llpe&!qL9_tte6CiI6OJpeIO zH`_ryKIm|NfH_FwgARs1o)uOL5?;2o9gg2>e$e^uj4W{H%;?M$RM0j$2hqXMZ|qRv zb!dZWop}?4X}ee73Fr{^X+$>1@VS9YV!6{VLDf2u!W-JY29Br9_0=KaTC0v6pqjh( zZ7PTT9wsRWxhO1HS0miXyRb=jSa&gh*&ObN``7TZt1yx8sJ@bWlIF^Aa#kk?$A({o zoTxZKHo2fTl&+Nc8VeKUIzn>TZ0#=eLpgTE@gP1e26yg4&p8p&8KcglhJ7FH`{xCR z_o+XyzXz*;jom$;tkaK!Ixno+E3XCy*aY2mwC_?ORWdVgf>;@sbEds*DfYn5c)3ov zMlHB)TYLL?;(u@LK2mE{Ze+Fl40BNk{3zh*g?@Y$lKcs3^0oU9MqeLK3j)qy|I{_V z!HH{jcWZzcV5O2WR$~~H2!*QJbmM$Lq3{z?0^$e_AbiGs$7jdc8OS2fBUUI>3P7(% z@)O@T>N)06<)?%#-2JEJ#u?Pr$hDC|M;*7b*%Ah!dVk9}?VE7K4APChm?ee(hK7|i z_B>e{a*o7%TU;rrpR6jEot$DQJ)(&w4yCkt>U#gYvG literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/f3/7f1a831caf4571f7f50161e7e720524e5b9e6b b/.git-pre-1.0/objects/f3/7f1a831caf4571f7f50161e7e720524e5b9e6b new file mode 100644 index 0000000000000000000000000000000000000000..b0e0399114bd4333c7f176add723f3820c17fc90 GIT binary patch literal 79 zcmV-V0I>gf0V^p=O;s>6XD~4U0)?!^vP6anOg}Hg-eiCLUT&tve{U4{ZL!^sR li}Op1l2eNrtnwG9f8H7TMt4*CGN!f!cA=Ah*a1I39!g)BBt!rJ literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/f3/ffb87e0ed77052fa98adfb1c274cd33cb92dc6 b/.git-pre-1.0/objects/f3/ffb87e0ed77052fa98adfb1c274cd33cb92dc6 new file mode 100644 index 0000000000000000000000000000000000000000..893fe2327b3296af4aaef233510820bcb320a5fc GIT binary patch literal 46 zcmV+}0MY+=0V^p=O;s>9WH2!R0)^bf%sd92xcgnA%~B7`*Bf`XtvAy;!+UfB0Q3(I E8I}qpKuANS8r7(%TF|to%1w^es$&P+VXG$o z_xX}II3z6~@v=OmcJKV%ci){IFNIo?kB48syvkX!VJjes%BVIb(LA?YuH5)H)38>B z0h%xiE2X#108(y`1_PeuO543lS(>cML!9$BadVecTk$Yh0M!;>JYbzr$os%ji`Y{R*HLMtE3nPVC~hI5E844i^ccA`mdOOvH3=(6s%plqm{jlUz zw}Fd^%8k<~rf^d*VcMzU(u3j2<>>px?AKy+I=);?+-x>JIbTf2!ylvBK@;M6EGkV5 z*dgX61f<=_Ru^y&A7q0mG@=d*t)2K|3t1GC<6|NVA)cj3)#W5Fo1GjtAu)S=qRJtz zs*HvDxmIO=I@WQ(E9}hr@F4Zc(gWM$T^|n^qF&!srQ$?ty6Ac(`Aq>>#18e4T}!pO zP_~lm^I=D*v~?>K~f2>0>1`v;;F*z<%6Yh?fc literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/fa/a21502f476a2e25a6e52aab982692b60f614ce b/.git-pre-1.0/objects/fa/a21502f476a2e25a6e52aab982692b60f614ce new file mode 100644 index 0000000..a3c6c72 --- /dev/null +++ b/.git-pre-1.0/objects/fa/a21502f476a2e25a6e52aab982692b60f614ce @@ -0,0 +1,3 @@ +x%ÆA +1 P×=EN0(.]ªK½Cš 5Ø6¥¿Eñî +n/f�tØw�åÉII¼,�nmXM¿¿¸ëÃ'táµXý Ì+N!´³ If€Î<4yß®«�‹¡eÞî\ô¦uÒ;| þ)0 \ No newline at end of file diff --git a/.git-pre-1.0/objects/fd/d749167f6b4ddba420531c63540498a06f88be b/.git-pre-1.0/objects/fd/d749167f6b4ddba420531c63540498a06f88be new file mode 100644 index 0000000000000000000000000000000000000000..b538c9a6e79ba7b2ded7112ccfa2e88fd534378c GIT binary patch literal 855 zcmV-d1E~CX0qs`bZ__Xk=DB}`x2IM@7BJvt8e(*lsI)P(cJS;bx7Mm-2ixgZq5bdp zlGt;aG~Ez9Ad!dsu+QJ!clY_?xlnU*^#17Wi<~7Zwg8f-jA~;N&2!7;!oA-y4NFxR zpb4|EPI>87SjyfjP)M~f!yXF!lEpw4JxqD1}_LPFo zCbNt4mcx=-W7KmCgAut(;si?!nw$g^AH%RR7*)x~{C;1mQk;+uM@~52Fb=eC8>H?j z9k3nNbz?vm_4?geslr9m8_9nZFmbVjNPI+bbXda>%?Xi(5Dg9Cn!YquF z`IbMc3kZYT&Vzo&h1O2S6APJB>B(=zf?NXJHM^S%WhyLmsQq$NQmI z4#5x&$=HTSWeMCT0I7?CBul1QVnG{v*n-)ngTSr2<6yK!@N=6sH=hKPt6_Vyq4nRS zOcExM@Eizax%)}|Ig+h21TD%_Mf3~kE?m8{P&&RmxFfr(7^$aGp6${EiB}E1VT(z| z3q8(M9)1=bU7$2e1TfvwvX3=7MNpN4>?YZ#%pD16#JtVVdymdpz6EN?)Eaub;NA|n z?XIQrNa4FX%Insa{$G~rOx!1uo*z?OmbwD<;~A$VcgAbF4;x@C{Q2)$r=^BaamRF> hp4z=`pQaA>iRE8CHSOiKzc0~dPjVu7_yv@A-htw6rt1Iz literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/fe/6e623bd6886270b5cd485c2be62beab4e1d86a b/.git-pre-1.0/objects/fe/6e623bd6886270b5cd485c2be62beab4e1d86a new file mode 100644 index 0000000000000000000000000000000000000000..ed3e6b75f353f4dc48ca42d7652d8154c7bfebd7 GIT binary patch literal 53 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≤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 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/pack/pack-091227e431babe2a5e47fb5d2d6e3b5947591f33.pack b/.git-pre-1.0/objects/pack/pack-091227e431babe2a5e47fb5d2d6e3b5947591f33.pack new file mode 100644 index 0000000000000000000000000000000000000000..5cbcfdbd92b8e1c6fba76f2b6fa83bdf667cce85 GIT binary patch literal 154457 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 FA2W02JC^_e literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/pack/pack-091227e431babe2a5e47fb5d2d6e3b5947591f33.rev b/.git-pre-1.0/objects/pack/pack-091227e431babe2a5e47fb5d2d6e3b5947591f33.rev new file mode 100644 index 0000000000000000000000000000000000000000..276680c58f0b0d4ad78ed4b5beceb267fb54602a GIT binary patch literal 2208 zcmXZc2e^+_90&0C+=Rv}2DvD9uJzMa(NeNCfhc=9(q`CWLDdKmQp)BRN&RpzCKi;4M zzfh6NROLx7QjKZuzfaykb@gGXAIVMBq?WNkysobOU+a=O>i)*EN^1@2vM#r%cgy-T zq><~TvN27$mFBcC9{2Kg4zPq)wB}B8kIK6^LcFh?vAC{}811?}9n_x_zjL1JPBK2z znFZ=BvK!qQLr?A{uJx$-OJy%<|C89u2YAr+r}7~lA->0B^x<)y;3=MF00YsRWQgZ} zmO~k)N0-RW#^Sz@U=q(Ul2JU*OXd#|-)X#Oa>xn9&zZ<%rV{%;-FyK#)BTsrS@L7~ zCT}s9dB*fEna|rSblpR~!+XSiSjGzDaeXUU<#S^nRvU9qXsces9`#RjRj)6&nDK2n^zc_2YwLHgp{&AfXWk|t3gv`_;74H*#Uq~Yt))X$oeun($aVUs2hASw- zl@#@Xf5>7u7oj-UP?A!Vp)BR7Kt=XZiON)=D%Ge?P3lmOMl_}=x6vNIi_nTTbmAU5 zbDD1SLSMrJ^d_F$3?8NrPw*r&=u1BaFp${{Wf;#e9A`6(WE9S3c#*M;V>}a>h;tQQ z<`rILD${t4H<-gkoXaqm1-!!|7V|#KS-~b&vWnHLWgY9;z(zK+jZgTJo$TT(_V5Eg za)hHC<2b+YE5G5~gt&Kq;>?8eT)d}_oc%S48 z^e>6OAHS8vxk=m~&dNd@RF{`ma?G#GGFeI1me(_b2BaG+A)SY$CH6lV z?p@-+?rLs`?2BF|gL#(GykO3ECH5~FtKKi|S7N`CxL^KPgehwKmCR-l?_yt)56sn- zAIcl#I@Ytr^M{ z&M8?*B`5jFPr=l@r4CkJzPfCu^uIfnipy=~DdgO{ZB&(eF-^-Bkp9ku_d(hHg_ H%Q*foUTG7J literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/pack/pack-c635a9249202c299756cc28e67675855546a7a4d.idx b/.git-pre-1.0/objects/pack/pack-c635a9249202c299756cc28e67675855546a7a4d.idx new file mode 100644 index 0000000000000000000000000000000000000000..9679faba6fd974c10154c55f81c5b24dc17b81c1 GIT binary patch literal 50408 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%0Dn)r4zv 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%0DaBh9QUvV=K#c$ z3+gG)6Cm;L!Yp3~BnQkTR+v?*ZUV_;6g__wXu>l#!-3-+iV=w%+?@H~bO`R@gkn~j*ekuy8+y7oz^4Ty_h zqChQfK!`-OVPgnB0mluT2^H_ow!d+=)~ z#LN`xZ3w_gQPdM$|042aDiM2z7?D7qB_5zhpl4Vd!N+4?gE9L$U?${j1(G^mdU;O~eru{fmVT}cX(Em9wr_*DmvI3}82aFg5AH;NF}sf%`W1EVJW$rrFLz0y_GO`-BJVB*0YyL; zs46;m&WD)(x`7!Z9Egf+pj|-xZ+?t^dIo6n==Fym;&bDW-#DvlE&~+dI{8d+e=b1b zMBlJOpR&do^sym&65_!TH7N~e_iyMUpDhu?nV7lxaE*`AA4<_9?SMjCN6yva2V#16 z207fxaMx!?E zM*pJNly)X0~aZ3mcIOckn)_V^{)W zdmOIsC{Wt};-0ZLYxQ`xbpW-C0|?>YsN3e4IigTQa)5TC7_rxhJi~f;YakB#P^*W4 zdTuXJ_ah&w@yty36_7ULb9r6>(QSwQBY-A`*y-d%-tI)6AiwyKGXkvurQb0>VC`dZ zZm)>M9-+sq1mbLf^Ni3S5R14L9rUoxyg*(~z>I_#+kzR1I|}s#*LywzDB)~C!?P3G zQBNR5_|f-7P!FEqS?MLjC1ywF%RqXG9!SBS@}Y*-AqJh^qwb@WgwZmPh#=Gf?3Xd_*16W>|AF>KC^sQ00!|jADVm3qV}O(czqK1h6X_=O9@i&k6%Ejq?N>o}D@1 zwcL~t2cpPPoX=@LQ4?^Ulf(O`1Yv%~{fe9ia77(*$MvX9W6V&*9CZdgxD03~4Y3}W z;WW#EB8Xnz2LLzIG0TPmO$pCvC6^%(t*1^o|4lk!w4)0sIL80)N*;oS_0xPNK(r1lVZ|gdTcP&u+|tbvTP+ z-g3pyb+-b9PGg^tM=ni3BH5tUAU-qiU|+Fc%I-kOBm)I;Oei4k`7YqT@N8}$>ccg} z{}^VP=3MlJ2%t3YMNXW+`Xk%bLT9Nn>qRG=Pdjf W*m}76k&D{I!Z5#Mp-)_L=>GuT>3tXg literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/pack/pack-c635a9249202c299756cc28e67675855546a7a4d.pack b/.git-pre-1.0/objects/pack/pack-c635a9249202c299756cc28e67675855546a7a4d.pack new file mode 100644 index 0000000000000000000000000000000000000000..11ae43af0fbdd469277ac748d27bb64f2e468670 GIT binary patch literal 421216 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 z z8F*K#tgUcw9-W48+udO)2KL_oUoqRx_JRKe*bVdr`ToyODi#c820&E|%5+r<7+C(F zeMME;{=ZBJ0{R^i0pP$g1hnY1o~*G73_;J%*uaHwOC;9uqp`A9iJYlDh>(MJ;#}EeP3>7pUgj`-%N*#4O)!kneSdj ze);!{x>VABOhGF9Sk?Wy4okYe)R30pFJD>41HXyQo&Ow?4A-otO>0A>OgC8+2NPVC z=?rVDpi`}6$DOP6gyj#*9&d!RSgJ`dR~lJxi8q~EW*GmaSoY2v3ool9tT|}r+GMwa zQ*1#9t}Av?2hmOA>J=aZ+lc8_XJPdPX&}hu!I5NPD#KTaiH4zz&v$GjmJA8;VmY!i z4V@2VLTLn1$dsB^kgNa8y| z{jb*8* zs}hq@OAJG25)-1LvO&w3&@P0G3hwwHAEv4^Xg4NKLXPekseFenRnqY0vAia0X^ny+ zN8}YXB@RObZ^L)ExDRI|GfIj{W|r-^hWx#hr`dfG`399kgKiE}DvhfXCITSv56Edw z4cCz(bnf$#U0a4Lv_n@{oZs*q4nFMQakpm!_q1^Boh`hONA1Q@iHAMmB0G6kaPG~` z6R>SU-5rA&&IoLBoV30icJOvT6#&dfyp;L08wESJ@H010;_nUO>Su0pDCgQ!Oe&g! zidjYPmJzji!aJjSyp|!VR&?(x%BKB?uq}63q-YI6Hr3QK_ua$~v=e)0O~E#9Y6DPB zwp9%7mg*B_(mlWNkW*n~mmS7etuz?wt`DbhdCg_|@_j#ykmVs4nBEYL@EG@wuLqGq zh?iY(@gy@erX-Lc_9Mk|i9;rs8w9s{iSd8BH)8b%|78(h0EJrpj^s;P#jO8-&o#Lm zd*=JZQ8Q67VMGAYLU{3GmJ-hY_#lG+ZPrZLyJyXqWZT#R?TAd98(E;Y7l=F*D-eQU zOKemA5oox|mb)4@W4n<{Ar|%v(BL15vf%Z4J`zFb^-z67!v}fM1Tin$DKmDY+q<3l z-uAxjed_qKzqowdZPR)XW8Uff4Wi=Kx(fhdiFrN@R|#;%9BlG|j58U=g1LRuo4;m=AZFWnT zo#hzmogE^d!d%lRZ-ArUhpQ{;+_HWN6w}VI_ zw+|5xsN!U*q2~DBu^G7DK~(cYhgoBFS5)H+I)R4h!}^++WarIT8{T~fstxqPcFX{W zn|Da627QNEAMp-NAJwHfC1~44wT5ptAL+&3P2iO`bMDyfYFq1F-t1buYzGAlP8E%n z>&1CEuQk3W>o=PIIz&=C;{nl=y=xP6BvZAy^BSLEGDxixI-ixR0m3^wUQ&MLzvw_3 z9@X2xe+NlQh8y1lN6c0LNz)X2(A71S50YO?#}q%FIefU%L-de3g&NpZc@8c4`sqq$ z5k^z0M#mL1XOM_0s*ZCMjmu_0=sTyZ$%*J{dd9OYRpDd_uTWi9T`dljG#cGl!6T2V^3CfL z&#ws%G(d}3;tVkS?#p}|E1i%#0-#|AZJ#q$OQU!SoI^J}wCDlWqjChDCKWnNYtE#R zGQO_^zkn*vUiW$;eSLuC{bT%wkH{l+`r5vWmP4FTzj`kG4QqC|c%pzso>>2S7S9% z&x??16N<+vvCE{uk`xGInn-GEb>po1JH`asXD($iVdT3Jy%Eg1MOfm?%I+_R%4%Dn ze*Vx7qO|I_WaiaMlSst{7>f-bK%dpy^e~w`ntbw_BkgdRYsUV3bAJs^4XYc@G6u1B zW_>AgWsm}swN)7@Q5VV?3{3n|C}l%0D`+>C{iYrjNl|$NJDT0AW%*>nytn0%ocdA% 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

!~|#&bZ7oyVL>XTPvP&I8?ogWQEWr#PT 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�Fuo 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⪻lD^9~LE&-9tps2Arwg@gh)DdvUWNZ<59 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 CAxmul literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/objects/pack/pack-c635a9249202c299756cc28e67675855546a7a4d.rev b/.git-pre-1.0/objects/pack/pack-c635a9249202c299756cc28e67675855546a7a4d.rev new file mode 100644 index 0000000000000000000000000000000000000000..7861750a109888a96df0307a90f39b4c16960ce1 GIT binary patch literal 7100 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 literal 0 HcmV?d00001 diff --git a/.git-pre-1.0/refs/heads/main b/.git-pre-1.0/refs/heads/main new file mode 100644 index 0000000..61fa9f7 --- /dev/null +++ b/.git-pre-1.0/refs/heads/main @@ -0,0 +1 @@ +003f9724e48adcf06b0ab65d6f41864743d18ba0 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..480bdf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ +.kotlin + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..30cf57e --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,10 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Ignored default folder with query files +/queries/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..5cb71ef --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..bfe80fd --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..3bf9143 --- /dev/null +++ b/pom.xml @@ -0,0 +1,79 @@ + + + 4.0.0 + + com.rsscripting + RS-Warehouse + RS-Warehouse + 1.0.0 + + + 21 + 21 + UTF-8 + + + + + + + src/main/resources + true + + + database.db + + + + + src/main/resources + false + + + database.db + + + + + + + + + papermc-repo + https://repo.papermc.io/repository/maven-public/ + + + codemc-repo + https://repo.codemc.io/repository/maven-public/ + + + + + + + io.papermc.paper + paper-api + 1.21.6-R0.1-SNAPSHOT + provided + + + + org.xerial + sqlite-jdbc + 3.50.3.0 + + + + net.wesjd + anvilgui + 1.10.10-SNAPSHOT + + + + + + + \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/RSWarehouse.java b/src/main/java/com/rsscripting/rswarehouse/RSWarehouse.java new file mode 100644 index 0000000..c8ce84f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/RSWarehouse.java @@ -0,0 +1,164 @@ +package com.rsscripting.rswarehouse; + +import com.rsscripting.rswarehouse.admin.admindao.PurgeVariantsDAO; +import com.rsscripting.rswarehouse.chestautoprocess.ChestAutoProcessingTask; +import com.rsscripting.rswarehouse.commands.RSPluginCommand; +import com.rsscripting.rswarehouse.commands.RSTabCompleter; +import com.rsscripting.rswarehouse.commands.ShopCommand; +import com.rsscripting.rswarehouse.config.ConfigManager; +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.registration.ListenerRegistration; +import com.rsscripting.rswarehouse.constants.RSConstants; +import com.rsscripting.rswarehouse.updatechecker.GitHubUpdateChecker; +import org.bukkit.command.PluginCommand; +import org.bukkit.plugin.java.JavaPlugin; + +public class RSWarehouse + extends JavaPlugin { + + private static RSWarehouse instance; + + @Override + public void onEnable() { + + saveDefaultConfig(); + + instance = this; + + /* CONFIG */ + ConfigManager.setup(); + + /* Database */ + DatabaseManager.initialize( + this + ); + + PurgeVariantsDAO + .purgeAll(); + + /* REGISTER LISTENERS */ + ListenerRegistration.registerAll( + this + ); + + /* REGISTER COMMANDS */ + registerCommands(); + + /* UPDATE CHECKER */ + GitHubUpdateChecker.checkForUpdates(); + + /* ENABLE MESSAGE */ + logEnabledMessage(); + + /* Start Chest Auto-Processing Tasks */ + startChestAutoProcessingTask(); + + } + + @Override + public void onDisable() { + + getLogger().info( + RSConstants.PLUGIN_NAME + + " Disabled" + ); + + } + + /* Register Commands method */ + private void registerCommands() { + + /* rswarehous command */ + PluginCommand command = + getCommand( + RSConstants.COMMAND_ALIAS + ); + + if (command != null) { + + command.setExecutor( + new RSPluginCommand() + ); + + command.setTabCompleter( + new RSTabCompleter() + ); + + } + + /* Shop Comment */ + PluginCommand shopCommand = getCommand("shop"); + + if (shopCommand != null) { + shopCommand.setExecutor(new ShopCommand()); + } + + } + + /* Start Chest Auto Processing Task method */ + private void startChestAutoProcessingTask() { + + boolean chestAutoProcessingEnabled = + ConfigManager.get() + .getBoolean( + "chest-auto-processing.enabled" + ); + + if (!chestAutoProcessingEnabled) { + + return; + + } + + int intervalSeconds = + ConfigManager.get() + .getInt( + "chest-auto-processing.interval-seconds" + ); + + if (intervalSeconds < 15) { + + getLogger().warning( + "Chest auto processing interval " + + "cannot be less than 15 seconds. " + + "Using 15 seconds." + ); + + intervalSeconds = 15; + + } + + new ChestAutoProcessingTask() + .runTaskTimer( + this, + intervalSeconds * 20L, + intervalSeconds * 20L + ); + + getLogger().info( + "Chest auto processing enabled. " + + "Interval: " + + intervalSeconds + + " seconds." + ); + + } + + /* Log Enabled Message */ + private void logEnabledMessage() { + + getLogger().info( + RSConstants.PLUGIN_NAME + + " Enabled" + ); + + } + + /* Get Instance */ + public static RSWarehouse getInstance() { + + return instance; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/AdminMenu.java b/src/main/java/com/rsscripting/rswarehouse/admin/AdminMenu.java new file mode 100644 index 0000000..1fa4916 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/AdminMenu.java @@ -0,0 +1,192 @@ +package com.rsscripting.rswarehouse.admin; + + +import com.rsscripting.rswarehouse.admin.admindao.WarehouseStatisticsDAO; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import com.rsscripting.rswarehouse.utils.VersionUtils; +import com.rsscripting.rswarehouse.updatechecker.GitHubUpdateChecker; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import net.kyori.adventure.text.Component; + +import java.util.List; + +public class AdminMenu { + + public static final String MENU_TITLE = "Admin"; + + public static void open( + Player player + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "ADMIN" + ), + 54, + Component.text( + MENU_TITLE + ).color( + NamedTextColor.GOLD + ) + ); + + + /* + |-------------------------------------------------------------------------- + | FILLER + |-------------------------------------------------------------------------- + */ + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem(i, filler); + + } + + /* +|-------------------------------------------------------------------------- +| BACK +|-------------------------------------------------------------------------- +*/ + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + + Material.OAK_DOOR, + + "§eBack" + + ) + ); + + /* + |-------------------------------------------------------------------------- + | RELOAD + |-------------------------------------------------------------------------- + */ + + menu.setItem( + 1, + RSMenuUtils.createMenuItem( + + Material.ENCHANTED_BOOK, + + "§cReload Plugin" + + ) + ); + + /* + |-------------------------------------------------------------------------- + | VERSION + |-------------------------------------------------------------------------- + */ + + menu.setItem( + 7, + RSMenuUtils.createMenuItemWithLore( + + Material.BOOK, + + "§ePlugin Version", + + List.of( + + "§7Installed: §f" + + VersionUtils.getVersion(), + + "", + + "§7Status: §f" + + GitHubUpdateChecker.getUpdateStatus(), + + "", + + "§7Latest: §f" + + ( + GitHubUpdateChecker.getLatestVersion() + == null + ? "Unknown" + : GitHubUpdateChecker.getLatestVersion() + ) + + ) + + ) + ); + + menu.setItem( + 10, + RSMenuUtils.createMenuItemWithLore( + Material.BOOKSHELF, + "§aCreate Category", + List.of( + "§7Create a new warehouse category." + ) + ) + ); + + menu.setItem( + 16, + RSMenuUtils.createMenuItemWithLore( + + Material.WRITABLE_BOOK, + + "§aWarehouse Statistics", + + List.of( + + "§7Total Unique Items: §f" + + String.format( + "%,d", + WarehouseStatisticsDAO.getTotalUniqueItems() + ), + + "§7Total Items: §f" + + String.format( + "%,d", + WarehouseStatisticsDAO.getTotalInventory() + ), + + "", + + "§7Unique Enchanted Variants: §f" + + String.format( + "%,d", + WarehouseStatisticsDAO.getTotalEnchantedVariants() + ), + + "§7Unique Damaged Variants: §f" + + String.format( + "%,d", + WarehouseStatisticsDAO.getTotalDamagedVariants() + ), + + "§7Unique Partially Filled Variants: §f" + + String.format( + "%,d", + WarehouseStatisticsDAO.getTotalPartiallyFilledVariants() + ) + + ) + + ) + ); + + + player.openInventory(menu); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/AdminMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/admin/AdminMenuListener.java new file mode 100644 index 0000000..4e813b4 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/AdminMenuListener.java @@ -0,0 +1,138 @@ +package com.rsscripting.rswarehouse.admin; + +import com.rsscripting.rswarehouse.config.ConfigManager; +import com.rsscripting.rswarehouse.conversion.ConvertMenuListener; +import com.rsscripting.rswarehouse.category.categorycreation.CategoryNameMenu; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.constants.RSConstants; +import com.rsscripting.rswarehouse.main.MainMenu; +import com.rsscripting.rswarehouse.navigation.NavigationManager; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import org.bukkit.block.Block; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class AdminMenuListener + implements Listener { + + private final ConvertMenuListener + conversionListener; + + public AdminMenuListener( + ConvertMenuListener conversionListener + ) { + + this.conversionListener = + conversionListener; + + } + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getWhoClicked() + instanceof Player player)) { + return; + } + + if (!(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder)) { + return; + } + + if (!holder.getMenuId() + .equals( + "ADMIN" + )) { + return; + } + + event.setCancelled(true); + + /* + |-------------------------------------------------------------------------- + | SECURITY + |-------------------------------------------------------------------------- + */ + + if (!player.isOp() + || + + !player.hasPermission( + RSConstants.ADMIN_PERMISSION + )) { + + player.closeInventory(); + + return; + + } + + /* + |-------------------------------------------------------------------------- + | BACK + |-------------------------------------------------------------------------- + */ + + if (event.getRawSlot() == 4) { + + Block block = + conversionListener.getSelectedBlock(player); + + if (block == null) { + + player.closeInventory(); + + return; + + } + + GuiSessionManager + .getSession(player) + .setSelectedBlock(block); + + NavigationManager.openMain(player); + + return; + + } + + /* + |-------------------------------------------------------------------------- + | RELOAD + |-------------------------------------------------------------------------- + */ + + if (event.getRawSlot() == 1) { + + ConfigManager.reload(); + + RSMessageUtils.success( + player, + "Configuration reloaded." + ); + + AdminMenu.open( + player + ); + + } + + if (event.getRawSlot() == 10) { + + CategoryNameMenu.open( + player + ); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/admindao/CategoryPlacementDAO.java b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/CategoryPlacementDAO.java new file mode 100644 index 0000000..8e9cb04 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/CategoryPlacementDAO.java @@ -0,0 +1,62 @@ +package com.rsscripting.rswarehouse.admin.admindao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; + +import java.sql.Connection; +import java.sql.PreparedStatement; + +public class CategoryPlacementDAO { + + public static void assignPageSlot( + int categoryId, + int page, + int slot + ) { + + String sql = + """ + UPDATE warehouse_categories + SET page = ?, + slot = ? + WHERE id = ? + """; + + try ( + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + sql + ) + ) { + + statement.setInt( + 1, + page + ); + + statement.setInt( + 2, + slot + ); + + statement.setInt( + 3, + categoryId + ); + + statement.executeUpdate(); + + } + catch ( + Exception exception + ) { + + exception.printStackTrace(); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/admindao/CreateCategoryDAO.java b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/CreateCategoryDAO.java new file mode 100644 index 0000000..ca55f41 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/CreateCategoryDAO.java @@ -0,0 +1,89 @@ +package com.rsscripting.rswarehouse.admin.admindao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class CreateCategoryDAO { + + public static void createCategory( + String internalName, + String displayName, + String material, + String lore + ) { + + int nextDisplayOrder = 1; + + try ( + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + INSERT INTO warehouse_categories ( + internal_name, + display_name, + material, + lore, + display_order, + page, + slot + ) + VALUES ( + ?, ?, ?, ?, ?, ?, ? + ) + """ + ) + ) { + + try ( + PreparedStatement maxStatement = + connection.prepareStatement( + """ + SELECT COALESCE( + MAX(display_order), + 0 + ) + FROM warehouse_categories + """ + ) + ) { + + ResultSet resultSet = + maxStatement.executeQuery(); + + if (resultSet.next()) { + + nextDisplayOrder = + resultSet.getInt(1) + 1; + + } + + } + + statement.setString(1, internalName); + statement.setString(2, displayName); + statement.setString(3, material); + statement.setString(4, lore); + statement.setInt(5, nextDisplayOrder); + statement.setInt(6, 0); + statement.setInt(7, 0); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/admindao/CreateSubCategoryDAO.java b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/CreateSubCategoryDAO.java new file mode 100644 index 0000000..51d3043 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/CreateSubCategoryDAO.java @@ -0,0 +1,136 @@ +package com.rsscripting.rswarehouse.admin.admindao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; + +import java.sql.*; + +public class CreateSubCategoryDAO { + + public static int createSubCategory( + int parentCategoryId, + String internalName, + String displayName, + String material, + String lore + ) { + + int nextDisplayOrder = 1; + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + INSERT INTO warehouse_categories ( + parent_category_id, + internal_name, + display_name, + material, + lore, + display_order, + page, + slot + ) + VALUES (?, ?, ?, ?, ?, ?, ?, ?) + """, + Statement.RETURN_GENERATED_KEYS + ) + + ) { + + try ( + + PreparedStatement maxStatement = + connection.prepareStatement( + """ + SELECT COALESCE( + MAX(display_order), + 0 + ) + FROM warehouse_categories + """ + ) + + ) { + + ResultSet resultSet = + maxStatement.executeQuery(); + + if (resultSet.next()) { + + nextDisplayOrder = + resultSet.getInt(1) + 1; + + } + + } + + statement.setInt( + 1, + parentCategoryId + ); + + statement.setString( + 2, + internalName + ); + + statement.setString( + 3, + displayName + ); + + statement.setString( + 4, + material + ); + + statement.setString( + 5, + lore + ); + + statement.setInt( + 6, + nextDisplayOrder + ); + + statement.setInt( + 7, + 0 + ); + + statement.setInt( + 8, + 0 + ); + + statement.executeUpdate(); + + ResultSet keys = + statement.getGeneratedKeys(); + + if (keys.next()) { + + return keys.getInt( + 1 + ); + + } + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return -1; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/admindao/PurgeVariantsDAO.java b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/PurgeVariantsDAO.java new file mode 100644 index 0000000..e129865 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/PurgeVariantsDAO.java @@ -0,0 +1,130 @@ +package com.rsscripting.rswarehouse.admin.admindao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import org.bukkit.Bukkit; + +import java.sql.Connection; +import java.sql.PreparedStatement; + +public class PurgeVariantsDAO { + + public static void purgeZeroQuantityDamagedVariants() { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE + FROM damaged_variants + WHERE quantity <= 0 + """ + ); + + int deleted = + statement.executeUpdate(); + + Bukkit.getLogger().info( + "[RS-Warehouse] Purged " + + deleted + + " empty damaged variants." + ); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + + public static void purgeZeroQuantityEnchantedVariants() { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE + FROM enchanted_variants + WHERE quantity <= 0 + """ + ); + + int deleted = + statement.executeUpdate(); + + Bukkit.getLogger().info( + "[RS-Warehouse] Purged " + + deleted + + " empty enchanted variants." + ); + + } + + catch (Exception exception) { + + exception.printStackTrace(); + + } + + } + + public static void purgeZeroQuantityPartiallyFilledVariants() { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE + FROM partially_filled_variants + WHERE quantity <= 0 + """ + ); + + int deleted = + statement.executeUpdate(); + + Bukkit.getLogger().info( + "[RS-Warehouse] Purged " + + deleted + + " empty partially filled variants." + ); + + } + + catch (Exception exception) { + + exception.printStackTrace(); + + } + + } + + public static void purgeAll() { + + purgeZeroQuantityDamagedVariants(); + + purgeZeroQuantityEnchantedVariants(); + + purgeZeroQuantityPartiallyFilledVariants(); + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/admindao/UpdateCategoryDAO.java b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/UpdateCategoryDAO.java new file mode 100644 index 0000000..cf644a4 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/UpdateCategoryDAO.java @@ -0,0 +1,140 @@ +package com.rsscripting.rswarehouse.admin.admindao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +public class UpdateCategoryDAO { + + public static void updateMaterial( + int categoryId, + String material + ) { + + String sql = + """ + UPDATE warehouse_categories + SET material = ? + WHERE id = ? + """; + + try ( + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + sql + ) + ) { + + statement.setString( + 1, + material + ); + + statement.setInt( + 2, + categoryId + ); + + statement.executeUpdate(); + + } + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static void updateDisplayName( + int categoryId, + String displayName + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + UPDATE warehouse_categories + SET display_name = ? + WHERE id = ? + """ + ) + + ) { + + statement.setString( + 1, + displayName + ); + + statement.setInt( + 2, + categoryId + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static void updateLore( + int categoryId, + String lore + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + UPDATE warehouse_categories + SET lore = ? + WHERE id = ? + """ + ) + + ) { + + statement.setString( + 1, + lore + ); + + statement.setInt( + 2, + categoryId + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/admindao/WarehouseStatisticsDAO.java b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/WarehouseStatisticsDAO.java new file mode 100644 index 0000000..b61eed0 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/admindao/WarehouseStatisticsDAO.java @@ -0,0 +1,169 @@ +package com.rsscripting.rswarehouse.admin.admindao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class WarehouseStatisticsDAO { + + public static long getTotalInventory() { + + long total = 0; + + total += getSum( + "warehouse_inventory" + ); + + total += getSum( + "damaged_variants" + ); + + total += getSum( + "enchanted_variants" + ); + + total += getSum( + "partially_filled_variants" + ); + + return total; + + } + + public static int getTotalUniqueItems() { + + int total = 0; + + total += getCount( + "warehouse_inventory" + ); + + total += getCount( + "damaged_variants" + ); + + total += getCount( + "enchanted_variants" + ); + + total += getCount( + "partially_filled_variants" + ); + + return total; + + } + + public static int getTotalDamagedVariants() { + + return getCount( + "damaged_variants" + ); + + } + + public static int getTotalEnchantedVariants() { + + return getCount( + "enchanted_variants" + ); + + } + + public static int getTotalPartiallyFilledVariants() { + + return getCount( + "partially_filled_variants" + ); + + } + + private static int getCount( + String table + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + "SELECT COUNT(*) FROM " + + table + ) + + ) { + + ResultSet result = + statement.executeQuery(); + + if ( + result.next() + ) { + + return result.getInt( + 1 + ); + + } + + } + + catch ( + Exception ignored + ) { + } + + return 0; + + } + + private static long getSum( + String table + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + "SELECT COALESCE(SUM(quantity),0) FROM " + + table + ) + + ) { + + ResultSet result = + statement.executeQuery(); + + if ( + result.next() + ) { + + return result.getLong( + 1 + ); + + } + + } + + catch ( + Exception exception + ) + { + + exception.printStackTrace(); + + } + + return 0; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryEditSession.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryEditSession.java new file mode 100644 index 0000000..4ce4417 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryEditSession.java @@ -0,0 +1,138 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +public class CategoryEditSession { + + private final int categoryId; + + private final String[] lore = + new String[5]; + + private int loreSlot = -1; + + private long loreExpiration = 0; + + private String displayName; + + private boolean editingDisplayName = false; + + private long displayNameExpiration = 0; + + public CategoryEditSession( + int categoryId + ) { + + this.categoryId = + categoryId; + + } + + public int getCategoryId() { + + return categoryId; + + } + + public String getLore( + int index + ) { + + return lore[index]; + + } + + public void setLore( + int index, + String value + ) { + + lore[index] = + value; + + } + + public int getLoreSlot() { + + return loreSlot; + + } + + public void setLoreSlot( + int loreSlot + ) { + + this.loreSlot = + loreSlot; + + } + + public long getLoreExpiration() { + + return loreExpiration; + + } + + public void setLoreExpiration( + long loreExpiration + ) { + + this.loreExpiration = + loreExpiration; + + } + + public String getDisplayName() { + + return displayName; + + } + + public void setDisplayName( + String displayName + ) { + + this.displayName = + displayName; + + } + + public boolean isEditingDisplayName() { + + return editingDisplayName; + + } + + public void setEditingDisplayName( + boolean editingDisplayName + ) { + + this.editingDisplayName = + editingDisplayName; + + } + + public long getDisplayNameExpiration() { + + return displayNameExpiration; + + } + + public void setDisplayNameExpiration( + long displayNameExpiration + ) { + + this.displayNameExpiration = + displayNameExpiration; + + } + + private int materialPickerPage = 0; + + public int getMaterialPickerPage() { + return materialPickerPage; + } + + public void setMaterialPickerPage(int materialPickerPage) { + this.materialPickerPage = materialPickerPage; + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryEditSessionManager.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryEditSessionManager.java new file mode 100644 index 0000000..123ade7 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryEditSessionManager.java @@ -0,0 +1,54 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class CategoryEditSessionManager { + + private static final Map< + UUID, + CategoryEditSession + > sessions = + new HashMap<>(); + + public static CategoryEditSession createSession( + UUID uuid, + int categoryId + ) { + + CategoryEditSession session = + new CategoryEditSession( + categoryId + ); + + sessions.put( + uuid, + session + ); + + return session; + + } + + public static CategoryEditSession getSession( + UUID uuid + ) { + + return sessions.get( + uuid + ); + + } + + public static void removeSession( + UUID uuid + ) { + + sessions.remove( + uuid + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryOptionsMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryOptionsMenuListener.java new file mode 100644 index 0000000..98389e1 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryOptionsMenuListener.java @@ -0,0 +1,4 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +public class CategoryOptionsMenuListener { +} diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryPageSlotSession.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryPageSlotSession.java new file mode 100644 index 0000000..23d2ec7 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryPageSlotSession.java @@ -0,0 +1,56 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +public class CategoryPageSlotSession { + + private final int categoryId; + + private Integer page; + + private Integer slot; + + public CategoryPageSlotSession( + int categoryId + ) { + + this.categoryId = + categoryId; + + } + + public int getCategoryId() { + + return categoryId; + + } + + public Integer getPage() { + + return page; + + } + + public void setPage( + Integer page + ) { + + this.page = + page; + + } + + public Integer getSlot() { + + return slot; + + } + + public void setSlot( + Integer slot + ) { + + this.slot = + slot; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryPageSlotSessionManager.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryPageSlotSessionManager.java new file mode 100644 index 0000000..f8f3726 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/CategoryPageSlotSessionManager.java @@ -0,0 +1,49 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class CategoryPageSlotSessionManager { + + private static final Map< + UUID, + CategoryPageSlotSession + > sessions = + new HashMap<>(); + + public static void createSession( + UUID uuid, + int categoryId + ) { + + sessions.put( + uuid, + new CategoryPageSlotSession( + categoryId + ) + ); + + } + + public static CategoryPageSlotSession getSession( + UUID uuid + ) { + + return sessions.get( + uuid + ); + + } + + public static void removeSession( + UUID uuid + ) { + + sessions.remove( + uuid + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/PageSlotAssignmentSession.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/PageSlotAssignmentSession.java new file mode 100644 index 0000000..fd21b5e --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/PageSlotAssignmentSession.java @@ -0,0 +1,85 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +public class PageSlotAssignmentSession { + + private final int itemId; + + private int categoryId; + + private String categoryName; + + private Integer page; + + private Integer slot; + + public PageSlotAssignmentSession( + int itemId + ) { + + this.itemId = itemId; + + } + + public int getItemId() { + + return itemId; + + } + + public Integer getPage() { + + return page; + + } + + public void setPage( + Integer page + ) { + + this.page = page; + + } + + public Integer getSlot() { + + return slot; + + } + + public void setSlot( + Integer slot + ) { + + this.slot = slot; + + } + + public int getCategoryId() { + + return categoryId; + + } + + public void setCategoryId( + int categoryId + ) { + + this.categoryId = categoryId; + + } + + public String getCategoryName() { + + return categoryName; + + } + + public void setCategoryName( + String categoryName + ) { + + this.categoryName = categoryName; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/PageSlotAssignmentSessionManager.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/PageSlotAssignmentSessionManager.java new file mode 100644 index 0000000..50bdcfd --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/PageSlotAssignmentSessionManager.java @@ -0,0 +1,80 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.model.WarehouseItem; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class PageSlotAssignmentSessionManager { + + private static final Map sessions = + new HashMap<>(); + + public static void createSession( + UUID uuid, + int itemId + ) { + + PageSlotAssignmentSession session = + new PageSlotAssignmentSession( + itemId + ); + + WarehouseItem item = + ItemDAO.getItemById( + itemId + ); + + if (item != null) { + + session.setCategoryId( + item.categoryId() + ); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + item.categoryId() + ); + + if (category != null) { + + session.setCategoryName( + category.displayName() + ); + + } + + } + + sessions.put( + uuid, + session + ); + + } + + public static PageSlotAssignmentSession getSession( + UUID uuid + ) { + + return sessions.get( + uuid + ); + + } + + public static void removeSession( + UUID uuid + ) { + + sessions.remove( + uuid + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryCreationSession.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryCreationSession.java new file mode 100644 index 0000000..3e1170f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryCreationSession.java @@ -0,0 +1,118 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +public class SubCategoryCreationSession { + + private final int itemId; + + private String internalName; + + private String displayName; + + private final String[] lore = + new String[5]; + + private int loreSlot = + -1; + + private long loreExpiration = + 0; + + public SubCategoryCreationSession( + int itemId + ) { + + this.itemId = itemId; + + } + + public int getItemId() { + + return itemId; + + } + + public String getInternalName() { + + return internalName; + + } + + public void setInternalName( + String internalName + ) { + + this.internalName = internalName; + + } + + public String getDisplayName() { + + return displayName; + + } + + public void setDisplayName( + String displayName + ) { + + this.displayName = displayName; + + } + + public void setLore( + int slot, + String value + ) { + + lore[slot] = value; + + } + + public String getLore( + int slot + ) { + + return lore[slot]; + + } + + public void clearLore() { + + for (int i = 0; i < lore.length; i++) { + + lore[i] = null; + + } + + } + + public int getLoreSlot() { + + return loreSlot; + + } + + public void setLoreSlot( + int loreSlot + ) { + + this.loreSlot = loreSlot; + + } + + public long getLoreExpiration() { + + return loreExpiration; + + } + + public void setLoreExpiration( + long loreExpiration + ) { + + this.loreExpiration = loreExpiration; + + } + + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryCreationSessionManager.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryCreationSessionManager.java new file mode 100644 index 0000000..5b1588c --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryCreationSessionManager.java @@ -0,0 +1,47 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class SubCategoryCreationSessionManager { + + private static final Map sessions = + new HashMap<>(); + + public static void createSession( + UUID uuid, + int itemId + ) { + + sessions.put( + uuid, + new SubCategoryCreationSession( + itemId + ) + ); + + } + + public static SubCategoryCreationSession getSession( + UUID uuid + ) { + + return sessions.get( + uuid + ); + + } + + public static void removeSession( + UUID uuid + ) { + + sessions.remove( + uuid + ); + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryEditSession.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryEditSession.java new file mode 100644 index 0000000..2eaf677 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryEditSession.java @@ -0,0 +1,83 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +public class SubCategoryEditSession { + + private final int itemId; + + private final int subCategoryId; + + private final String[] lore = + new String[5]; + + private int loreSlot = -1; + + private long loreExpiration = 0; + + public String getLore( + int index + ) { + + return lore[index]; + + } + + public void setLore( + int index, + String value + ) { + + lore[index] = value; + + } + + public int getLoreSlot() { + + return loreSlot; + + } + + public void setLoreSlot( + int loreSlot + ) { + + this.loreSlot = loreSlot; + + } + + public long getLoreExpiration() { + + return loreExpiration; + + } + + public void setLoreExpiration( + long loreExpiration + ) { + + this.loreExpiration = loreExpiration; + + } + + public SubCategoryEditSession( + int itemId, + int subCategoryId + ) { + + this.itemId = itemId; + this.subCategoryId = subCategoryId; + + } + + public int getItemId() { + + return itemId; + + } + + public int getSubCategoryId() { + + return subCategoryId; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryEditSessionManager.java b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryEditSessionManager.java new file mode 100644 index 0000000..4e64284 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/adminsessions/SubCategoryEditSessionManager.java @@ -0,0 +1,53 @@ +package com.rsscripting.rswarehouse.admin.adminsessions; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class SubCategoryEditSessionManager { + + private static final Map sessions = + new HashMap<>(); + + public static SubCategoryEditSession createSession( + UUID uuid, + int itemId, + int subCategoryId + ) { + + SubCategoryEditSession session = + new SubCategoryEditSession( + itemId, + subCategoryId + ); + + sessions.put( + uuid, + session + ); + + return session; + + } + + public static SubCategoryEditSession getSession( + UUID uuid + ) { + + return sessions.get( + uuid + ); + + } + + public static void removeSession( + UUID uuid + ) { + + sessions.remove( + uuid + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategoryPageNumberMenu.java b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategoryPageNumberMenu.java new file mode 100644 index 0000000..b1ceefe --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategoryPageNumberMenu.java @@ -0,0 +1,126 @@ +package com.rsscripting.rswarehouse.admin.assignpageslot; + +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryPageSlotSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryPageSlotSessionManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import org.bukkit.inventory.meta.ItemMeta; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import org.bukkit.inventory.view.AnvilView; + +import java.util.List; + +public class CategoryPageNumberMenu { + + public static final String TITLE = + "Page Number"; + + public static void open( + Player player + ) { + + CategoryPageSlotSession session = + CategoryPageSlotSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + return; + } + + AnvilView view = + MenuType.ANVIL.builder() + .title( + Component.text(TITLE) + ) + .build(player); + + ItemStack confirm = + new ItemStack(Material.LIME_WOOL); + + ItemMeta meta = + confirm.getItemMeta(); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + session.getCategoryId() + ); + + if ( + category != null + && category.page() > 0 + ) { + + meta.displayName( + Component.text( + String.valueOf( + category.page() + ) + ) + ); + + } + else { + + meta.displayName( + Component.empty() + ); + + } + + meta.lore( + List.of( + Component.text( + "Save page." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta(meta); + + view.setItem( + 0, + confirm + ); + + ItemStack cancel = + new ItemStack(Material.RED_WOOL); + + ItemMeta cancelMeta = + cancel.getItemMeta(); + + cancelMeta.displayName( + Component.empty() + ); + + cancelMeta.lore( + List.of( + Component.text( + "Cancel" + ).color( + NamedTextColor.WHITE + ) + ) + ); + + cancel.setItemMeta( + cancelMeta + ); + + view.setItem( + 1, + cancel + ); + + view.open(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategoryPageNumberMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategoryPageNumberMenuListener.java new file mode 100644 index 0000000..38c6d4d --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategoryPageNumberMenuListener.java @@ -0,0 +1,157 @@ +package com.rsscripting.rswarehouse.admin.assignpageslot; + +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryPageSlotSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryPageSlotSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.view.AnvilView; + +public class CategoryPageNumberMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains(CategoryPageNumberMenu.TITLE)) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + CategoryPageSlotSession session = + CategoryPageSlotSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + return; + } + + if (event.getRawSlot() == 0) { + + String pageText = + anvilView.getRenameText(); + + if (pageText.isBlank()) { + + RSMessageUtils.error( + player, + "Page cannot be blank." + ); + + return; + + } + + int page; + + try { + + page = + Integer.parseInt( + pageText + ); + + } + + catch (NumberFormatException exception) { + + RSMessageUtils.error( + player, + "Page must be a number." + ); + + return; + + } + + if (page < 1) { + + RSMessageUtils.error( + player, + "Page must be 1 or greater." + ); + + return; + + } + + session.setPage( + page + ); + + event.getView() + .getTopInventory() + .clear(); + + CategorySlotNumberMenu.open( + player + ); + + return; + + } + + if (event.getRawSlot() == 1) { + + event.getView() + .getTopInventory() + .clear(); + + player.closeInventory(); + + } + + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains(PageNumberMenu.TITLE)) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategorySlotNumberMenu.java b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategorySlotNumberMenu.java new file mode 100644 index 0000000..5cbfaef --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategorySlotNumberMenu.java @@ -0,0 +1,118 @@ +package com.rsscripting.rswarehouse.admin.assignpageslot; + +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryPageSlotSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryPageSlotSessionManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.AnvilView; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; + +import java.util.List; + +public class CategorySlotNumberMenu { + + public static final String TITLE = + "Slot Number"; + + public static void open( + Player player + ) { + + CategoryPageSlotSession session = + CategoryPageSlotSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + AnvilView view = + MenuType.ANVIL.builder() + .title( + Component.text(TITLE) + ) + .build(player); + + ItemStack confirm = + new ItemStack(Material.LIME_WOOL); + + ItemMeta meta = + confirm.getItemMeta(); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + session.getCategoryId() + ); + + if ( + category != null + && category.slot() > 0 + ) { + + meta.displayName( + Component.text( + String.valueOf( + category.slot() + ) + ) + ); + + } + else { + + meta.displayName( + Component.empty() + ); + + } + + meta.lore( + List.of( + Component.text( + "Save slot." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta(meta); + + view.setItem( + 0, + confirm + ); + + ItemStack cancel = + new ItemStack(Material.RED_WOOL); + + ItemMeta cancelMeta = + cancel.getItemMeta(); + + cancelMeta.displayName( + Component.empty() + ); + + cancel.setItemMeta( + cancelMeta + ); + + view.setItem( + 1, + cancel + ); + + view.open(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategorySlotNumberMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategorySlotNumberMenuListener.java new file mode 100644 index 0000000..7c4ead7 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/CategorySlotNumberMenuListener.java @@ -0,0 +1,181 @@ +package com.rsscripting.rswarehouse.admin.assignpageslot; + +import com.rsscripting.rswarehouse.admin.admindao.CategoryPlacementDAO; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryPageSlotSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryPageSlotSessionManager; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.view.AnvilView; + +public class CategorySlotNumberMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains( + CategorySlotNumberMenu.TITLE + )) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + CategoryPageSlotSession session = + CategoryPageSlotSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + + return; + + } + + if (event.getRawSlot() == 0) { + + String slotText = + anvilView.getRenameText(); + + if (slotText.isBlank()) { + + RSMessageUtils.error( + player, + "Slot cannot be blank." + ); + + return; + + } + + int slot; + + try { + + slot = + Integer.parseInt( + slotText + ); + + } + + catch (NumberFormatException exception) { + + RSMessageUtils.error( + player, + "Slot must be a number." + ); + + return; + + } + + if (slot < 9 || slot > 53) { + + RSMessageUtils.error( + player, + "Slot must be between 9 and 53." + ); + + return; + + } + + session.setSlot( + slot + ); + + CategoryPlacementDAO.assignPageSlot( + session.getCategoryId(), + session.getPage(), + session.getSlot() + ); + + event.getView() + .getTopInventory() + .clear(); + + player.closeInventory(); + + CategoryMenu.open( + player + ); + + CategoryPageSlotSessionManager.removeSession( + player.getUniqueId() + ); + + RSMessageUtils.success( + player, + "Item page/slot updated." + ); + + return; + } + + if (event.getRawSlot() == 1) { + + event.getView() + .getTopInventory() + .clear(); + + player.closeInventory(); + + } + + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains( + CategorySlotNumberMenu.TITLE + )) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/PageNumberMenu.java b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/PageNumberMenu.java new file mode 100644 index 0000000..b42ddd7 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/PageNumberMenu.java @@ -0,0 +1,120 @@ +package com.rsscripting.rswarehouse.admin.assignpageslot; + +import com.rsscripting.rswarehouse.admin.adminsessions.PageSlotAssignmentSession; +import com.rsscripting.rswarehouse.admin.adminsessions.PageSlotAssignmentSessionManager; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.AnvilView; + +import java.util.List; + +public class PageNumberMenu { + + public static final String TITLE = + "Page Number"; + + public static void open( + Player player + ) { + + PageSlotAssignmentSession session = + PageSlotAssignmentSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + return; + } + + WarehouseItem item = + ItemDAO.getItemById( + session.getItemId() + ); + + AnvilView view = + MenuType.ANVIL.builder() + .title( + Component.text(TITLE) + ) + .build(player); + + ItemStack confirm = + new ItemStack(Material.LIME_WOOL); + + ItemMeta meta = + confirm.getItemMeta(); + + if (item != null && item.page() != null) { + + meta.displayName( + Component.text( + String.valueOf(item.page()) + ) + ); + + } else { + + meta.displayName( + Component.empty() + ); + + } + + meta.lore( + List.of( + Component.text( + "Save page." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta(meta); + + view.setItem( + 0, + confirm + ); + + ItemStack cancel = + new ItemStack(Material.RED_WOOL); + + ItemMeta cancelMeta = + cancel.getItemMeta(); + + cancelMeta.displayName( + Component.empty() + ); + + cancelMeta.lore( + List.of( + Component.text( + "Cancel" + ).color( + NamedTextColor.WHITE + ) + ) + ); + + cancel.setItemMeta( + cancelMeta + ); + + view.setItem( + 1, + cancel + ); + + view.open(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/PageNumberMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/PageNumberMenuListener.java new file mode 100644 index 0000000..84a0707 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/PageNumberMenuListener.java @@ -0,0 +1,157 @@ +package com.rsscripting.rswarehouse.admin.assignpageslot; + +import com.rsscripting.rswarehouse.admin.adminsessions.PageSlotAssignmentSession; +import com.rsscripting.rswarehouse.admin.adminsessions.PageSlotAssignmentSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.view.AnvilView; + +public class PageNumberMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains(PageNumberMenu.TITLE)) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + PageSlotAssignmentSession session = + PageSlotAssignmentSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + return; + } + + if (event.getRawSlot() == 0) { + + String pageText = + anvilView.getRenameText(); + + if (pageText.isBlank()) { + + RSMessageUtils.error( + player, + "Page cannot be blank." + ); + + return; + + } + + int page; + + try { + + page = + Integer.parseInt( + pageText + ); + + } + + catch (NumberFormatException exception) { + + RSMessageUtils.error( + player, + "Page must be a number." + ); + + return; + + } + + if (page < 1) { + + RSMessageUtils.error( + player, + "Page must be 1 or greater." + ); + + return; + + } + + session.setPage( + page + ); + + event.getView() + .getTopInventory() + .clear(); + + SlotNumberMenu.open( + player + ); + + return; + + } + + if (event.getRawSlot() == 1) { + + event.getView() + .getTopInventory() + .clear(); + + player.closeInventory(); + + } + + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains(PageNumberMenu.TITLE)) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/SlotNumberMenu.java b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/SlotNumberMenu.java new file mode 100644 index 0000000..9b64a9f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/SlotNumberMenu.java @@ -0,0 +1,112 @@ +package com.rsscripting.rswarehouse.admin.assignpageslot; + +import com.rsscripting.rswarehouse.admin.adminsessions.PageSlotAssignmentSession; +import com.rsscripting.rswarehouse.admin.adminsessions.PageSlotAssignmentSessionManager; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.AnvilView; + +import java.util.List; + +public class SlotNumberMenu { + + public static final String TITLE = + "Slot Number"; + + public static void open( + Player player + ) { + + PageSlotAssignmentSession session = + PageSlotAssignmentSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + WarehouseItem item = + ItemDAO.getItemById( + session.getItemId() + ); + + AnvilView view = + MenuType.ANVIL.builder() + .title( + Component.text(TITLE) + ) + .build(player); + + ItemStack confirm = + new ItemStack(Material.LIME_WOOL); + + ItemMeta meta = + confirm.getItemMeta(); + + if (item != null && item.slot() != null) { + + meta.displayName( + Component.text( + String.valueOf(item.slot()) + ) + ); + + } else { + + meta.displayName( + Component.empty() + ); + + } + + meta.lore( + List.of( + Component.text( + "Save slot." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta(meta); + + view.setItem( + 0, + confirm + ); + + ItemStack cancel = + new ItemStack(Material.RED_WOOL); + + ItemMeta cancelMeta = + cancel.getItemMeta(); + + cancelMeta.displayName( + Component.empty() + ); + + cancel.setItemMeta( + cancelMeta + ); + + view.setItem( + 1, + cancel + ); + + view.open(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/SlotNumberMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/SlotNumberMenuListener.java new file mode 100644 index 0000000..3b77954 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/admin/assignpageslot/SlotNumberMenuListener.java @@ -0,0 +1,184 @@ +package com.rsscripting.rswarehouse.admin.assignpageslot; + +import com.rsscripting.rswarehouse.admin.adminsessions.PageSlotAssignmentSession; +import com.rsscripting.rswarehouse.admin.adminsessions.PageSlotAssignmentSessionManager; +import com.rsscripting.rswarehouse.placement.placementdao.ItemPlacementDAO; +import com.rsscripting.rswarehouse.item.ItemsMenu; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.view.AnvilView; + +public class SlotNumberMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains( + SlotNumberMenu.TITLE + )) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + PageSlotAssignmentSession session = + PageSlotAssignmentSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + + return; + + } + + if (event.getRawSlot() == 0) { + + String slotText = + anvilView.getRenameText(); + + if (slotText.isBlank()) { + + RSMessageUtils.error( + player, + "Slot cannot be blank." + ); + + return; + + } + + int slot; + + try { + + slot = + Integer.parseInt( + slotText + ); + + } + + catch (NumberFormatException exception) { + + RSMessageUtils.error( + player, + "Slot must be a number." + ); + + return; + + } + + if (slot < 9 || slot > 53) { + + RSMessageUtils.error( + player, + "Slot must be between 9 and 53." + ); + + return; + + } + + session.setSlot( + slot + ); + + ItemPlacementDAO.assignPageSlot( + session.getItemId(), + session.getPage(), + session.getSlot() + ); + + event.getView() + .getTopInventory() + .clear(); + + player.closeInventory(); + + ItemsMenu.open( + player, + session.getCategoryId(), + session.getCategoryName(), + session.getPage() - 1 + ); + + PageSlotAssignmentSessionManager.removeSession( + player.getUniqueId() + ); + + RSMessageUtils.success( + player, + "Item page/slot updated." + ); + + return; + } + + if (event.getRawSlot() == 1) { + + event.getView() + .getTopInventory() + .clear(); + + player.closeInventory(); + + } + + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains( + SlotNumberMenu.TITLE + )) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositMenu.java b/src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositMenu.java new file mode 100644 index 0000000..d2d73e5 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositMenu.java @@ -0,0 +1,161 @@ +package com.rsscripting.rswarehouse.autodeposit; + +import com.rsscripting.rswarehouse.autodeposit.autodepositdao.AutoDepositDAO; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.List; + +public class AutoDepositMenu { + + public static final String MENU_ID = + "AUTO_DEPOSIT"; + + public static final String TITLE = + "Auto Deposit"; + + public static void open( + Player player + ) { + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + int page = + Math.max( + 1, + session.getAutoDepositPage() + ); + + session.setAutoDepositPage( + page + ); + + Inventory inventory = + Bukkit.createInventory( + new RSMenuHolder( + MENU_ID + ), + 54, + Component.text( + TITLE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for ( + int slot = 0; + slot <= 8; + slot++ + ) { + + inventory.setItem( + slot, + filler + ); + + } + + boolean enabled = + AutoDepositDAO.isEnabled( + player.getUniqueId() + ); + + inventory.setItem( + 2, + enabled + ? RSMenuUtils.createMenuItem( + Material.GREEN_DYE, + "Enabled" + ) + : RSMenuUtils.createMenuItem( + Material.RED_DYE, + "Disabled" + ) + ); + + inventory.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§a Back to Category Menu" + ) + ); + + List filters = + AutoDepositDAO.getFilters( + player.getUniqueId() + ); + + int highestPage = + filters.size() / 45 + 1; + + int start = + (page - 1) * 45; + + int slot = + 9; + + for ( + int i = start; + i < filters.size() + && slot <= 53; + i++ + ) { + + inventory.setItem( + slot++, + filters.get( + i + ) + ); + + } + + if ( + page > 1 + ) { + + inventory.setItem( + 0, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§ePrevious Page" + ) + ); + + } + + if ( + page < highestPage + 1 + ) { + + inventory.setItem( + 8, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§eNext Page" + ) + ); + + } + + player.openInventory( + inventory + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositMenuListener.java new file mode 100644 index 0000000..8504dcc --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositMenuListener.java @@ -0,0 +1,190 @@ +package com.rsscripting.rswarehouse.autodeposit; + +import com.rsscripting.rswarehouse.autodeposit.autodepositdao.AutoDepositDAO; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class AutoDepositMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + AutoDepositMenu.MENU_ID + )) { + + return; + + } + + if ( + event.getClickedInventory() + == event.getView() + .getTopInventory() + ) { + + event.setCancelled( + true + ); + + } + + Player player = + (Player) event.getWhoClicked(); + + int slot = + event.getRawSlot(); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + if ( + slot == 0 + ) { + + session.setAutoDepositPage( + session.getAutoDepositPage() + - 1 + ); + + AutoDepositMenu.open( + player + ); + + return; + + } + + if ( + slot == 8 + ) { + + session.setAutoDepositPage( + session.getAutoDepositPage() + + 1 + ); + + AutoDepositMenu.open( + player + ); + + return; + + } + + if ( + slot == 4 + ) { + + CategoryMenu.open( + player + ); + + return; + + } + + if ( + slot >= 9 + && slot <= 53 + && event.getCursor() != null + && !event.getCursor() + .getType() + .isAir() + ) { + + ItemStack filter = + event.getCursor() + .clone(); + + filter.setAmount( + 1 + ); + + AutoDepositDAO.addFilter( + player.getUniqueId(), + filter + ); + + RSMessageUtils.success( + player, + "Filter added." + ); + + AutoDepositMenu.open( + player + ); + + return; + + } + + if (slot == 2) { + + boolean enabled = + AutoDepositDAO.isEnabled( + player.getUniqueId() + ); + + AutoDepositDAO.setEnabled( + player.getUniqueId(), + !enabled + ); + + AutoDepositMenu.open( + player + ); + + return; + + } + + if ( + slot >= 9 + && slot <= 53 + && event.getCurrentItem() != null + && !event.getCurrentItem() + .getType() + .isAir() + ) { + + AutoDepositDAO.removeFilter( + player.getUniqueId(), + event.getCurrentItem() + ); + + RSMessageUtils.success( + player, + "Filter removed." + ); + + AutoDepositMenu.open( + player + ); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositPickupListener.java b/src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositPickupListener.java new file mode 100644 index 0000000..5608ee4 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/autodeposit/AutoDepositPickupListener.java @@ -0,0 +1,97 @@ +package com.rsscripting.rswarehouse.autodeposit; + +import com.rsscripting.rswarehouse.autodeposit.autodepositdao.AutoDepositDAO; +import com.rsscripting.rswarehouse.inventory.inventorydao.InventoryLookupDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import org.bukkit.entity.Item; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.entity.EntityPickupItemEvent; +import org.bukkit.inventory.ItemStack; + +public class AutoDepositPickupListener + implements Listener { + + @EventHandler + public void onEntityPickupItem( + EntityPickupItemEvent event + ) { + + if ( + !(event.getEntity() + instanceof Player player) + ) { + + return; + + } + + if ( + !AutoDepositDAO.isEnabled( + player.getUniqueId() + ) + ) { + + return; + + } + + Item entity = + event.getItem(); + + ItemStack item = + entity.getItemStack(); + + if ( + !AutoDepositDAO.matchesFilter( + player.getUniqueId(), + item + ) + ) { + + return; + + } + + Integer inventoryId = + InventoryLookupDAO.findInventoryId( + item + ); + + if ( + inventoryId == null + && + !player.getServer() + .getPluginManager() + .getPlugin( + "RS-Warehouse" + ) + .getConfig() + .getBoolean( + "allow-uncategorized-item-creation", + true + ) + ) { + + return; + + } + + ItemDAO.addItem( + player.getUniqueId() + .toString(), + player.getName(), + item, + item.getAmount() + ); + + event.setCancelled( + true + ); + + entity.remove(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/autodeposit/autodepositdao/AutoDepositDAO.java b/src/main/java/com/rsscripting/rswarehouse/autodeposit/autodepositdao/AutoDepositDAO.java new file mode 100644 index 0000000..2182761 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/autodeposit/autodepositdao/AutoDepositDAO.java @@ -0,0 +1,346 @@ +package com.rsscripting.rswarehouse.autodeposit.autodepositdao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.inventory.ItemStack; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + +public class AutoDepositDAO { + + public static boolean isEnabled( + UUID playerUuid + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT enabled + FROM auto_deposit_settings + WHERE player_uuid = ? + """ + ) + + ) { + + statement.setString( + 1, + playerUuid.toString() + ); + + ResultSet resultSet = + statement.executeQuery(); + + if ( + resultSet.next() + ) { + + return resultSet.getInt( + "enabled" + ) == 1; + + } + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return false; + + } + + public static void setEnabled( + UUID playerUuid, + boolean enabled + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + INSERT OR REPLACE + INTO auto_deposit_settings ( + player_uuid, + enabled + ) + VALUES ( + ?, + ? + ) + """ + ) + + ) { + + statement.setString( + 1, + playerUuid.toString() + ); + + statement.setInt( + 2, + enabled + ? 1 + : 0 + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static void addFilter( + UUID playerUuid, + ItemStack item + ) { + + item = + normalize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + INSERT OR IGNORE + INTO auto_deposit_filters ( + player_uuid, + serialized_item + ) + VALUES ( + ?, + ? + ) + """ + ) + + ) { + + statement.setString( + 1, + playerUuid.toString() + ); + + statement.setString( + 2, + ItemStackUtils.serialize( + item + ) + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static void removeFilter( + UUID playerUuid, + ItemStack item + ) { + + item = + normalize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE + FROM auto_deposit_filters + WHERE player_uuid = ? + AND serialized_item = ? + """ + ) + + ) { + + statement.setString( + 1, + playerUuid.toString() + ); + + statement.setString( + 2, + ItemStackUtils.serialize( + item + ) + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static List getFilters( + UUID playerUuid + ) { + + List filters = + new ArrayList<>(); + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT serialized_item + FROM auto_deposit_filters + WHERE player_uuid = ? + """ + ) + + ) { + + statement.setString( + 1, + playerUuid.toString() + ); + + ResultSet resultSet = + statement.executeQuery(); + + while ( + resultSet.next() + ) { + + filters.add( + ItemStackUtils.deserialize( + resultSet.getString( + "serialized_item" + ) + ) + ); + + } + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return filters; + + } + + public static boolean matchesFilter( + UUID playerUuid, + ItemStack item + ) { + + item = + normalize( + item + ); + + for ( + ItemStack filter + : getFilters( + playerUuid + ) + ) { + + if ( + filter.isSimilar( + item + ) + ) { + + return true; + + } + + } + + return false; + + } + + public static boolean shouldBlockWithdrawal( + UUID playerUuid, + ItemStack item + ) { + + return isEnabled( + playerUuid + ) + && + matchesFilter( + playerUuid, + item + ); + + } + + private static ItemStack normalize( + ItemStack item + ) { + + ItemStack copy = + item.clone(); + + copy.setAmount( + 1 + ); + + return copy; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryDisplayNameMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryDisplayNameMenu.java new file mode 100644 index 0000000..ae63078 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryDisplayNameMenu.java @@ -0,0 +1,93 @@ +package com.rsscripting.rswarehouse.category.categorycreation; + +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.AnvilView; + +import java.util.List; + +public class CategoryDisplayNameMenu { + + public static final String TITLE = + "Display Name"; + + public static void open(Player player) { + + AnvilView view = MenuType.ANVIL + .builder() + .title( + Component.text( + TITLE + ) + ) + .build(player); + + ItemStack confirm = new ItemStack(Material.LIME_WOOL); + + ItemMeta meta = confirm.getItemMeta(); + + meta.displayName( + Component.text("") + ); + + meta.lore( + List.of( + Component.text( + "Save and proceed to material picker." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta(meta); + + view.setItem( + 0, + confirm + ); + + + ItemStack cancel = new ItemStack(Material.RED_WOOL); + + ItemMeta metacancel = cancel.getItemMeta(); + + metacancel.displayName( + Component.text("") + ); + + metacancel.lore( + List.of( + Component.text( + "Cancel" + ).color( + NamedTextColor.WHITE + ) + ) + ); + + cancel.setItemMeta(metacancel); + + + view.setItem( + 1, + cancel + ); + + GuiSessionManager.getSession( + player + ).setCategoryDisplayNameMenuOpen( + true + ); + + view.open(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryDisplayNameMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryDisplayNameMenuListener.java new file mode 100644 index 0000000..1ea03c3 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryDisplayNameMenuListener.java @@ -0,0 +1,158 @@ +package com.rsscripting.rswarehouse.category.categorycreation; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.admin.AdminMenu; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.view.AnvilView; +import org.bukkit.event.inventory.InventoryCloseEvent; + +public class CategoryDisplayNameMenuListener implements Listener { + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains( + CategoryDisplayNameMenu.TITLE + )) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + if (!session.isCategoryDisplayNameMenuOpen()) { + + return; + + } + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + return; + } + + if (event.getRawSlot() == 0) { + + String categoryName = + anvilView.getRenameText(); + + if (categoryName.length() > 25) { + + RSMessageUtils.error( + player, + "Category names may not exceed 25 characters." + ); + + return; + + } + + if (categoryName.isBlank()) { + + RSMessageUtils.error( + player, + "Category name cannot be empty." + ); + + return; + + } + + if ( + CategoryDAO.categoryExists( + categoryName + ) + ) { + + RSMessageUtils.error( + player, + "A category with that name already exists." + ); + + return; + + } + + session.setPendingCategoryDisplayName( + categoryName + ); + + session.setCategoryDisplayNameMenuOpen( + false + ); + + session.clearPendingCategoryLore(); + + event.getView().getTopInventory().clear(); + + CategoryMaterialPickerMenu.open( + player, + 0 + ); + + return; + + } + + if (event.getRawSlot() == 1) { + + event.getView().getTopInventory().clear(); + + AdminMenu.open( + player + ); + + } + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() + instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains( + CategoryDisplayNameMenu.TITLE + )) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreChatListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreChatListener.java new file mode 100644 index 0000000..b7573d1 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreChatListener.java @@ -0,0 +1,130 @@ +package com.rsscripting.rswarehouse.category.categorycreation; + +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +public class CategoryLoreChatListener + implements Listener { + + @EventHandler + public void onPlayerChat( + AsyncPlayerChatEvent event + ) { + + Player player = + event.getPlayer(); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + int loreSlot = + session.getPendingCategoryLoreSlot(); + + if (loreSlot < 0) { + + return; + + } + + event.setCancelled( + true + ); + + String message = + event.getMessage(); + + if (message.length() > 50) { + + RSMessageUtils.error( + player, + "Lore lines may not exceed 50 characters." + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> CategoryLoreMenu.open( + player + ) + ); + + return; + + } + + if ( + message.equalsIgnoreCase( + "cancel" + ) + ) { + + session.setPendingCategoryLoreSlot( + -1 + ); + + session.setPendingCategoryLoreExpiration( + 0 + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> CategoryLoreMenu.open( + player + ) + ); + + return; + + } + + session.setPendingCategoryLore( + loreSlot, + message + ); + + session.setPendingCategoryLoreSlot( + -1 + ); + + session.setPendingCategoryLoreExpiration( + 0 + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> { + + RSMessageUtils.success( + player, + "Lore line saved." + ); + + CategoryLoreMenu.open( + player + ); + + } + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreMenu.java new file mode 100644 index 0000000..56d6e75 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreMenu.java @@ -0,0 +1,144 @@ +package com.rsscripting.rswarehouse.category.categorycreation; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class CategoryLoreMenu { + + public static void open( + Player player + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "CATEGORY_LORE" + ), + 27, + Component.text( + "Category Lore" + ) + ); + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem( + i, + RSMenuUtils.createFillerPane() + ); + + } + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + for (int i = 0; i < 5; i++) { + + ItemStack book = + new ItemStack( + Material.WRITABLE_BOOK + ); + + ItemMeta meta = + book.getItemMeta(); + + meta.displayName( + Component.text( + "Lore Line " + + (i + 1) + ) + ); + + List lore = + new ArrayList<>(); + + String value = + session.getPendingCategoryLore( + i + ); + + if ( + value == null + || value.isBlank() + ) { + + lore.add( + Component.text( + "(Empty)" + ) + ); + + } + + else { + + lore.add( + Component.text( + value + ) + ); + + } + + lore.add( + Component.empty() + ); + + lore.add( + Component.text( + "Click to edit." + ) + ); + + meta.lore( + lore + ); + + book.setItemMeta( + meta + ); + + menu.setItem( + 11 + i, + book + ); + + } + + menu.setItem( + 22, + RSMenuUtils.createMenuItem( + Material.LIME_WOOL, + "§aCreate Category" + ) + ); + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§eBack" + ) + ); + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreMenuListener.java new file mode 100644 index 0000000..4ce4a35 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryLoreMenuListener.java @@ -0,0 +1,236 @@ +package com.rsscripting.rswarehouse.category.categorycreation; + +import com.rsscripting.rswarehouse.admin.admindao.CreateCategoryDAO; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class CategoryLoreMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "CATEGORY_LORE" + )) { + + return; + + } + + event.setCancelled( + true + ); + + Player player = + (Player) event.getWhoClicked(); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + switch (event.getSlot()) { + + case 4 -> CategoryMaterialPickerMenu.open( + player, + 0 + ); + + case 11 -> editLore( + player, + session, + 0 + ); + + case 12 -> editLore( + player, + session, + 1 + ); + + case 13 -> editLore( + player, + session, + 2 + ); + + case 14 -> editLore( + player, + session, + 3 + ); + + case 15 -> editLore( + player, + session, + 4 + ); + + case 22 -> createCategory( + player, + session + ); + + } + + } + + private void editLore( + Player player, + GuiSession session, + int loreSlot + ) { + + session.setPendingCategoryLoreSlot( + loreSlot + ); + + session.setPendingCategoryLoreExpiration( + System.currentTimeMillis() + + 30000 + ); + + final long expiration = + session.getPendingCategoryLoreExpiration(); + + Bukkit.getScheduler() + .runTaskLater( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> { + + if ( + session.getPendingCategoryLoreExpiration() + != expiration + ) { + + return; + + } + + session.setPendingCategoryLoreSlot( + -1 + ); + + session.setPendingCategoryLoreExpiration( + 0 + ); + + RSMessageUtils.error( + player, + "Lore input timed out." + ); + + }, + 20L * 30 + ); + + player.closeInventory(); + + RSMessageUtils.info( + player, + "Enter lore for line " + + (loreSlot + 1) + + " in chat." + ); + + RSMessageUtils.info( + player, + "Type 'cancel' to abort." + ); + + RSMessageUtils.info( + player, + "Auto-Cancels after 30 seconds." + ); + + } + + private void createCategory( + Player player, + GuiSession session + ) { + + StringBuilder loreBuilder = + new StringBuilder(); + + for (int i = 0; i < 5; i++) { + + String line = + session.getPendingCategoryLore( + i + ); + + if (line == null) { + + line = ""; + + } + + loreBuilder.append( + line + ); + + if (i < 4) { + + loreBuilder.append( + "\n" + ); + + } + + } + + CreateCategoryDAO.createCategory( + session.getPendingCategoryInternalName(), + session.getPendingCategoryDisplayName(), + session.getPendingCategoryMaterial(), + loreBuilder.toString() + ); + + session.setPendingCategoryInternalName( + null + ); + + session.setPendingCategoryDisplayName( + null + ); + + session.setPendingCategoryMaterial( + null + ); + + session.clearPendingCategoryLore(); + + session.setPendingCategoryLoreSlot( + -1 + ); + + CategoryMenu.open( + player + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryMaterialPickerMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryMaterialPickerMenu.java new file mode 100644 index 0000000..33e5cc7 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryMaterialPickerMenu.java @@ -0,0 +1,110 @@ +package com.rsscripting.rswarehouse.category.categorycreation; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.List; + +public class CategoryMaterialPickerMenu { + + public static void open( + Player player, + int page + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "CATEGORY_MATERIAL_PICKER" + ), + 54, + "Select Material" + ); + + int slot = 0; + + List materials = + Arrays.stream( + Material.values() + ) + .filter( + Material::isItem + ) + .filter( + material -> + !material.name().endsWith( + "_SMITHING_TEMPLATE" + ) + ) + .toList(); + + int startIndex = + page * 45; + + int maxPages = + (int) Math.ceil( + (double) materials.size() + / 45 + ); + + for (int inventorySlot = 0; + inventorySlot < 45; + inventorySlot++) { + + int materialIndex = + startIndex + inventorySlot; + + if (materialIndex >= materials.size()) { + + break; + + } + + menu.setItem( + inventorySlot, + new ItemStack( + materials.get( + materialIndex + ) + ) + ); + + } + + if (page > 0) { + + menu.setItem( + 45, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§cPrevious Page" + ) + ); + + } + + if (page < maxPages - 1) { + + menu.setItem( + 53, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aNext Page" + ) + ); + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryMaterialPickerMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryMaterialPickerMenuListener.java new file mode 100644 index 0000000..0904814 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryMaterialPickerMenuListener.java @@ -0,0 +1,109 @@ +package com.rsscripting.rswarehouse.category.categorycreation; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class CategoryMaterialPickerMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "CATEGORY_MATERIAL_PICKER" + )) { + + return; + + } + + event.setCancelled( + true + ); + + if (event.getCurrentItem() == null) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + String categoryName = + session.getPendingCategoryInternalName(); + + if (categoryName == null) { + + player.closeInventory(); + + return; + + } + + if (event.getSlot() == 45) { + + session.setMaterialPickerPage( + Math.max( + 0, + session.getMaterialPickerPage() - 1 + ) + ); + + CategoryMaterialPickerMenu.open( + player, + session.getMaterialPickerPage() + ); + + return; + + } + + if (event.getSlot() == 53) { + + session.setMaterialPickerPage( + session.getMaterialPickerPage() + 1 + ); + + CategoryMaterialPickerMenu.open( + player, + session.getMaterialPickerPage() + ); + + return; + + } + + session.setPendingCategoryMaterial( + event.getCurrentItem() + .getType() + .name() + ); + + CategoryLoreMenu.open( + player + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryNameMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryNameMenu.java new file mode 100644 index 0000000..635dab6 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryNameMenu.java @@ -0,0 +1,94 @@ +package com.rsscripting.rswarehouse.category.categorycreation; + +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import net.kyori.adventure.text.Component; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.AnvilView; + +import java.util.List; + + +public class CategoryNameMenu { + + public static final String TITLE = + "Category Name"; + + public static void open(Player player) { + + AnvilView view = MenuType.ANVIL + .builder() + .title( + Component.text( + TITLE + ) + ) + .build(player); + + ItemStack confirm = new ItemStack(Material.LIME_WOOL); + + ItemMeta meta = confirm.getItemMeta(); + + meta.displayName( + Component.text("") + ); + + meta.lore( + List.of( + Component.text( + "Save and proceed to material picker." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta(meta); + + view.setItem( + 0, + confirm + ); + + + ItemStack cancel = new ItemStack(Material.RED_WOOL); + + ItemMeta metacancel = cancel.getItemMeta(); + + metacancel.displayName( + Component.text("") + ); + + metacancel.lore( + List.of( + Component.text( + "Cancel" + ).color( + NamedTextColor.WHITE + ) + ) + ); + + cancel.setItemMeta(metacancel); + + + view.setItem( + 1, + cancel + ); + + GuiSessionManager.getSession( + player + ).setCategoryInternalNameMenuOpen( + true + ); + + view.open(); + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryNameMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryNameMenuListener.java new file mode 100644 index 0000000..05caa99 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorycreation/CategoryNameMenuListener.java @@ -0,0 +1,145 @@ +package com.rsscripting.rswarehouse.category.categorycreation; + +import com.rsscripting.rswarehouse.admin.AdminMenu; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.view.AnvilView; +import org.bukkit.event.inventory.InventoryCloseEvent; + +public class CategoryNameMenuListener implements Listener { + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains( + CategoryNameMenu.TITLE + )) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + if (!session.isCategoryInternalNameMenuOpen()) { + + return; + + } + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + return; + } + + if (event.getRawSlot() == 0) { + + String categoryName = + anvilView.getRenameText(); + + if (categoryName.length() > 25) { + + RSMessageUtils.error( + player, + "Category names may not exceed 25 characters." + ); + + return; + + } + + if (categoryName.isBlank()) { + + RSMessageUtils.error( + player, + "Category name cannot be empty." + ); + + return; + + } + + session.setPendingCategoryInternalName( + categoryName + ); + + session.setPendingCategoryMaterial( + null + ); + + session.clearPendingCategoryLore(); + + event.getView().getTopInventory().clear(); + + session.setCategoryInternalNameMenuOpen( + false + ); + + CategoryDisplayNameMenu.open( + player + ); + + return; + + } + + if (event.getRawSlot() == 1) { + + event.getView().getTopInventory().clear(); + + AdminMenu.open( + player + ); + + } + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() + instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains( + CategoryNameMenu.TITLE + )) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditDisplayNameMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditDisplayNameMenu.java new file mode 100644 index 0000000..b0d865f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditDisplayNameMenu.java @@ -0,0 +1,101 @@ +package com.rsscripting.rswarehouse.category.categoryedit; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.AnvilView; + +import java.util.List; + +public class CategoryEditDisplayNameMenu { + + public static final String TITLE = + "Edit Display Name"; + + public static void open( + Player player, + String currentDisplayName + ) { + + AnvilView view = MenuType.ANVIL + .builder() + .title( + Component.text( + TITLE + ) + ) + .build(player); + + ItemStack confirm = + new ItemStack( + Material.LIME_WOOL + ); + + ItemMeta meta = + confirm.getItemMeta(); + + meta.displayName( + Component.text( + currentDisplayName + ) + ); + + meta.lore( + List.of( + Component.text( + "§aSave display name." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta( + meta + ); + + view.setItem( + 0, + confirm + ); + + ItemStack cancel = + new ItemStack( + Material.RED_WOOL + ); + + ItemMeta cancelMeta = + cancel.getItemMeta(); + + cancelMeta.displayName( + Component.text("") + ); + + cancelMeta.lore( + List.of( + Component.text( + "Cancel" + ).color( + NamedTextColor.WHITE + ) + ) + ); + + cancel.setItemMeta( + cancelMeta + ); + + view.setItem( + 1, + cancel + ); + + view.open(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditDisplayNameMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditDisplayNameMenuListener.java new file mode 100644 index 0000000..fdd7491 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditDisplayNameMenuListener.java @@ -0,0 +1,159 @@ +package com.rsscripting.rswarehouse.category.categoryedit; + +import com.rsscripting.rswarehouse.admin.admindao.UpdateCategoryDAO; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSessionManager; +import com.rsscripting.rswarehouse.category.categoryoptions.CategoryOptionsMenu; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.view.AnvilView; + +public class CategoryEditDisplayNameMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains( + CategoryEditDisplayNameMenu.TITLE + )) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + CategoryEditSession session = + CategoryEditSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + event.setCancelled( + true + ); + + if (event.getCurrentItem() == null) { + + return; + + } + + if (event.getRawSlot() == 0) { + + String displayName = + anvilView.getRenameText(); + + if (displayName.length() > 25) { + + RSMessageUtils.error( + player, + "Category names may not exceed 25 characters." + ); + + return; + + } + + if (displayName.isBlank()) { + + RSMessageUtils.error( + player, + "Category name cannot be empty." + ); + + return; + + } + + UpdateCategoryDAO.updateDisplayName( + session.getCategoryId(), + displayName + ); + + event.getView() + .getTopInventory() + .clear(); + + CategoryOptionsMenu.open( + player, + session.getCategoryId() + ); + + CategoryEditSessionManager.removeSession( + player.getUniqueId() + ); + + return; + + } + + if (event.getRawSlot() == 1) { + + event.getView() + .getTopInventory() + .clear(); + + CategoryOptionsMenu.open( + player, + session.getCategoryId() + ); + + CategoryEditSessionManager.removeSession( + player.getUniqueId() + ); + + } + + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() + instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains( + CategoryEditDisplayNameMenu.TITLE + )) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenu.java new file mode 100644 index 0000000..3d15d25 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenu.java @@ -0,0 +1,169 @@ +package com.rsscripting.rswarehouse.category.categoryedit; + +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSessionManager; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class CategoryEditLoreMenu { + + public static void open( + Player player + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "CATEGORY_EDIT_LORE" + ), + 27, + Component.text( + " Edit Category Lore" + ) + ); + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem( + i, + RSMenuUtils.createFillerPane() + ); + + } + + CategoryEditSession session = + CategoryEditSessionManager.getSession( + player.getUniqueId() + ); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + session.getCategoryId() + ); + + String[] loreLines = + category.lore() == null + ? new String[5] + : category.lore().split("\n", -1); + + if (session.getLore(0) == null) { + + for (int i = 0; i < 5; i++) { + + if (i < loreLines.length) { + + session.setLore( + i, + loreLines[i] + ); + + } + + } + + } + + for (int i = 0; i < 5; i++) { + + ItemStack book = + new ItemStack( + Material.WRITABLE_BOOK + ); + + ItemMeta meta = + book.getItemMeta(); + + meta.displayName( + Component.text( + "Lore Line " + + (i + 1) + ) + ); + + List lore = + new ArrayList<>(); + + String value = + session.getLore(i); + + if ( + value == null + || value.isBlank() + ) { + + lore.add( + Component.text( + "(Empty)" + ) + ); + + } else { + + lore.add( + Component.text( + value + ) + ); + + } + + lore.add( + Component.empty() + ); + + lore.add( + Component.text( + "Click to edit." + ) + ); + + meta.lore( + lore + ); + + book.setItemMeta( + meta + ); + + menu.setItem( + 11 + i, + book + ); + + } + + menu.setItem( + 22, + RSMenuUtils.createMenuItem( + Material.LIME_WOOL, + "§aSave Lore" + ) + ); + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§eBack" + ) + ); + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenuChatListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenuChatListener.java new file mode 100644 index 0000000..2d0915b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenuChatListener.java @@ -0,0 +1,146 @@ +package com.rsscripting.rswarehouse.category.categoryedit; + +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +public class CategoryEditLoreMenuChatListener + implements Listener { + + @EventHandler + public void onPlayerChat( + AsyncPlayerChatEvent event + ) { + + Player player = + event.getPlayer(); + + CategoryEditSession session = + CategoryEditSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + int loreSlot = + session.getLoreSlot(); + + if (loreSlot < 0) { + + return; + + } + + event.setCancelled( + true + ); + + String message = + event.getMessage(); + + if (message.length() > 50) { + + RSMessageUtils.error( + player, + "Lore lines may not exceed 50 characters." + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> CategoryEditLoreMenu.open(player) + ); + + return; + + } + + if ( + message.equalsIgnoreCase( + "cancel" + ) + ) { + + session.setLoreSlot( + -1 + ); + + session.setLoreExpiration( + 0 + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> CategoryEditLoreMenu.open(player) + ); + + return; + + } + + if ( + message.equalsIgnoreCase("clear") + ) { + + session.setLore( + loreSlot, + "" + ); + + } + else { + + session.setLore( + loreSlot, + message + ); + + } + + session.setLoreSlot( + -1 + ); + + session.setLoreExpiration( + 0 + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> { + + RSMessageUtils.success( + player, + "Lore line saved." + ); + + CategoryEditLoreMenu.open( + player + ); + + } + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenuListener.java new file mode 100644 index 0000000..b41f03b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditLoreMenuListener.java @@ -0,0 +1,228 @@ +package com.rsscripting.rswarehouse.category.categoryedit; + +import com.rsscripting.rswarehouse.admin.admindao.UpdateCategoryDAO; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSessionManager; +import com.rsscripting.rswarehouse.category.categoryoptions.CategoryOptionsMenu; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class CategoryEditLoreMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "CATEGORY_EDIT_LORE" + )) { + + return; + + } + + event.setCancelled( + true + ); + + Player player = + (Player) event.getWhoClicked(); + + CategoryEditSession session = + CategoryEditSessionManager.getSession( + player.getUniqueId() + ); + + switch (event.getSlot()) { + + case 4 -> { + + CategoryOptionsMenu.open( + player, + session.getCategoryId() + ); + + } + + case 11 -> editLore( + player, + session, + 0 + ); + + case 12 -> editLore( + player, + session, + 1 + ); + + case 13 -> editLore( + player, + session, + 2 + ); + + case 14 -> editLore( + player, + session, + 3 + ); + + case 15 -> editLore( + player, + session, + 4 + ); + + case 22 -> saveLore( + player, + session + ); + + } + + } + + private void editLore( + Player player, + CategoryEditSession session, + int loreSlot + ){ + + session.setLoreSlot( + loreSlot + ); + + session.setLoreExpiration( + System.currentTimeMillis() + + 30000 + ); + + final long expiration = + session.getLoreExpiration(); + + Bukkit.getScheduler() + .runTaskLater( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> { + + if ( + session.getLoreExpiration() + != expiration + ) { + + return; + + } + + session.setLoreSlot( + -1 + ); + + session.setLoreExpiration( + 0 + ); + + RSMessageUtils.error( + player, + "Lore input timed out." + ); + + }, + 20L * 30 + ); + + player.closeInventory(); + + RSMessageUtils.info( + player, + "Enter lore for line " + + (loreSlot + 1) + + " in chat." + ); + + RSMessageUtils.info( + player, + "Type 'cancel' to abort." + ); + + RSMessageUtils.info( + player, + "Type 'clear' to clear the lore line." + ); + + RSMessageUtils.info( + player, + "Auto-Cancels after 30 seconds." + ); + + } + + private void saveLore( + Player player, + CategoryEditSession session + ) { + + StringBuilder loreBuilder = + new StringBuilder(); + + for (int i = 0; i < 5; i++) { + + String line = + session.getLore(i); + + if (line == null) { + + line = ""; + + } + + loreBuilder.append( + line + ); + + if (i < 4) { + + loreBuilder.append( + "\n" + ); + + } + + } + + UpdateCategoryDAO.updateLore( + session.getCategoryId(), + loreBuilder.toString() + ); + + CategoryEditSessionManager.removeSession( + player.getUniqueId() + ); + + CategoryOptionsMenu.open( + player, + session.getCategoryId() + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditMaterialMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditMaterialMenu.java new file mode 100644 index 0000000..be6f008 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditMaterialMenu.java @@ -0,0 +1,110 @@ +package com.rsscripting.rswarehouse.category.categoryedit; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +import java.util.Arrays; +import java.util.List; + +public class CategoryEditMaterialMenu { + + public static void open( + Player player, + int page + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "CATEGORY_EDIT_MATERIAL_PICKER" + ), + 54, + "Select Material" + ); + + int slot = 0; + + List materials = + Arrays.stream( + Material.values() + ) + .filter( + Material::isItem + ) + .filter( + material -> + !material.name().endsWith( + "_SMITHING_TEMPLATE" + ) + ) + .toList(); + + int startIndex = + page * 45; + + int maxPages = + (int) Math.ceil( + (double) materials.size() + / 45 + ); + + for (int inventorySlot = 0; + inventorySlot < 45; + inventorySlot++) { + + int materialIndex = + startIndex + inventorySlot; + + if (materialIndex >= materials.size()) { + + break; + + } + + menu.setItem( + inventorySlot, + new ItemStack( + materials.get( + materialIndex + ) + ) + ); + + } + + if (page > 0) { + + menu.setItem( + 45, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§cPrevious Page" + ) + ); + + } + + if (page < maxPages - 1) { + + menu.setItem( + 53, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aNext Page" + ) + ); + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditMaterialMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditMaterialMenuListener.java new file mode 100644 index 0000000..f63e757 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryedit/CategoryEditMaterialMenuListener.java @@ -0,0 +1,106 @@ +package com.rsscripting.rswarehouse.category.categoryedit; + +import com.rsscripting.rswarehouse.admin.admindao.UpdateCategoryDAO; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSessionManager; +import com.rsscripting.rswarehouse.category.categoryoptions.CategoryOptionsMenu; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class CategoryEditMaterialMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "CATEGORY_EDIT_MATERIAL_PICKER" + )) { + + return; + + } + + event.setCancelled( + true + ); + + if (event.getCurrentItem() == null) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + CategoryEditSession session = + CategoryEditSessionManager.getSession( + player.getUniqueId() + ); + + if (event.getSlot() == 45) { + + session.setMaterialPickerPage( + Math.max( + 0, + session.getMaterialPickerPage() - 1 + ) + ); + + CategoryEditMaterialMenu.open( + player, + session.getMaterialPickerPage() + ); + + return; + + } + + if (event.getSlot() == 53) { + + session.setMaterialPickerPage( + session.getMaterialPickerPage() + 1 + ); + + CategoryEditMaterialMenu.open( + player, + session.getMaterialPickerPage() + ); + + return; + + } + + UpdateCategoryDAO.updateMaterial( + session.getCategoryId(), + event.getCurrentItem() + .getType() + .name() + ); + + CategoryOptionsMenu.open( + player, + session.getCategoryId() + ); + + CategoryEditSessionManager.removeSession( + player.getUniqueId() + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryDAO.java b/src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryDAO.java new file mode 100644 index 0000000..b976696 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryDAO.java @@ -0,0 +1,263 @@ +package com.rsscripting.rswarehouse.category.categorymenu; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.model.WarehouseCategory; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +public class CategoryDAO { + + public static List getCategories(){ + + List categories = + new ArrayList<>(); + + try ( + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT + id, + parent_category_id, + internal_name, + display_name, + material, + lore, + display_order, + page, + slot + FROM warehouse_categories + WHERE parent_category_id IS NULL + ORDER BY display_order ASC + """ + ); + + ResultSet resultSet = + statement.executeQuery() + ) { + + while (resultSet.next()) { + + categories.add( + new WarehouseCategory( + resultSet.getInt( + "id" + ), + resultSet.getObject( + "parent_category_id" + ) == null + ? null + : resultSet.getInt( + "parent_category_id" + ), + resultSet.getString( + "internal_name" + ), + resultSet.getString( + "display_name" + ), + resultSet.getString( + "material" + ), + resultSet.getString( + "lore" + ), + resultSet.getInt( + "display_order" + ), + resultSet.getInt( + "page" + ), + resultSet.getInt( + "slot" + ) + ) + ); + + } + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return categories; + + } + + public static WarehouseCategory getCategoryById( + int categoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT + id, + parent_category_id, + internal_name, + display_name, + material, + lore, + display_order, + page, + slot + FROM warehouse_categories + WHERE id = ? + """ + ) + + ) { + + statement.setInt( + 1, + categoryId + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return new WarehouseCategory( + resultSet.getInt( + "id" + ), + resultSet.getObject( + "parent_category_id" + ) == null + ? null + : resultSet.getInt( + "parent_category_id" + ), + resultSet.getString( + "internal_name" + ), + resultSet.getString( + "display_name" + ), + resultSet.getString( + "material" + ), + resultSet.getString( + "lore" + ), + resultSet.getInt( + "display_order" + ), + resultSet.getInt( + "page" + ), + resultSet.getInt( + "slot" + ) + ); + + } + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return null; + + } + + public static boolean categoryExists( + String name + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT 1 + FROM warehouse_categories + WHERE LOWER(internal_name) = LOWER(?) + LIMIT 1 + """ + ) + + ) { + + statement.setString( + 1, + name + ); + + return statement.executeQuery().next(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return false; + + } + + public static void deleteCategory( + int categoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE + FROM warehouse_categories + WHERE id = ? + """ + ) + + ) { + + statement.setInt( + 1, + categoryId + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryMenu.java new file mode 100644 index 0000000..8b5824a --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryMenu.java @@ -0,0 +1,429 @@ +package com.rsscripting.rswarehouse.category.categorymenu; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class CategoryMenu { + + public static final String MENU_TITLE = + "Categories"; + + public static void open( + Player player + ) { + + open( + player, + 1 + ); + + } + + public static void open( + Player player, + int page + ) { + + RSMenuHolder holder = + new RSMenuHolder( + "CATEGORIES" + ); + + holder.setPage( + page + ); + + Inventory menu = + Bukkit.createInventory( + holder, + 54, + Component.text( + MENU_TITLE + ).color( + NamedTextColor.BLUE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for ( + int slot = 0; + slot <= 8; + slot++ + ) { + + menu.setItem( + slot, + filler + ); + + } + + menu.setItem( + 2, + RSMenuUtils.createMenuItemWithLore( + Material.HOPPER, + "§aAuto Deposit", + List.of( + "§7Automatically deposits", + "§7matching items into", + "§7Warehouse when picked up.", + "", + "§eClick to open." + ) + ) + ); + + List categories = + CategoryDAO.getCategories(); + + WarehouseCategory uncategorized = + null; + + List displayCategories = + new ArrayList<>(); + + for ( + WarehouseCategory category + : categories + ) { + + if ( + category.displayName() + .equalsIgnoreCase( + "Uncategorized" + ) + ) { + + uncategorized = + category; + + } + else { + + displayCategories.add( + category + ); + + } + + } + + if (page > 1) { + + menu.setItem( + 0, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aPrevious Page" + ) + ); + + } + + for ( + WarehouseCategory category + : displayCategories + ) { + + if ( + category.page() <= 0 + || category.slot() <= 0 + ) { + + continue; + + } + + if ( + category.page() + != page + ) { + + continue; + + } + + int slot = + category.slot(); + + if ( + slot < 9 + || slot > 53 + ) { + + continue; + + } + + List lore = + new ArrayList<>(); + + if ( + category.lore() != null + && !category.lore() + .isBlank() + ) { + + lore.addAll( + Arrays.asList( + category.lore() + .split( + "\n" + ) + ) + ); + + } + + ItemStack icon = + RSMenuUtils.createMenuItemWithLore( + Material.valueOf( + category.material() + ), + "§a" + + category.displayName(), + lore + ); + + ItemMeta meta = + icon.getItemMeta(); + + if (meta != null) { + + meta.addItemFlags( + ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_ADDITIONAL_TOOLTIP + ); + + meta.getPersistentDataContainer() + .set( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER, + category.id() + ); + + icon.setItemMeta( + meta + ); + + } + + menu.setItem( + slot, + icon + ); + + } + + int highestAssignedPage = 1; + + List unassigned = + new ArrayList<>(); + + for ( + WarehouseCategory category + : displayCategories + ) { + + if ( + category.page() > 0 + ) { + + highestAssignedPage = + Math.max( + highestAssignedPage, + category.page() + ); + + } + + if ( + category.page() <= 0 + || category.slot() <= 0 + ) { + + unassigned.add( + category + ); + + } + + } + + boolean hasNextPage = + displayCategories.stream() + .anyMatch( + category -> + category.page() + > page + ); + + if ( + !unassigned.isEmpty() + && page + == highestAssignedPage + ) { + + hasNextPage = + true; + + } + + if (hasNextPage) { + + menu.setItem( + 8, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aNext Page" + ) + ); + + } + + if ( + page + == highestAssignedPage + 1 + ) { + + int slot = 9; + + for ( + WarehouseCategory category + : unassigned + ) { + + if (slot > 53) { + break; + } + + List lore = + new ArrayList<>(); + + if ( + category.lore() != null + && !category.lore() + .isBlank() + ) { + + lore.addAll( + Arrays.asList( + category.lore() + .split( + "\n" + ) + ) + ); + + } + + ItemStack icon = + RSMenuUtils.createMenuItemWithLore( + Material.valueOf( + category.material() + ), + "§a" + + category.displayName(), + lore + ); + + ItemMeta meta = + icon.getItemMeta(); + + if (meta != null) { + + meta.addItemFlags( + ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_ADDITIONAL_TOOLTIP + ); + + meta.getPersistentDataContainer() + .set( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER, + category.id() + ); + + icon.setItemMeta( + meta + ); + + } + + menu.setItem( + slot, + icon + ); + + slot++; + + } + + } + + if (uncategorized != null) { + + ItemStack icon = + RSMenuUtils.createMenuItem( + Material.valueOf( + uncategorized.material() + ), + "§a" + + uncategorized.displayName() + ); + + ItemMeta meta = + icon.getItemMeta(); + + if (meta != null) { + + meta.addItemFlags( + ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_ADDITIONAL_TOOLTIP + ); + + meta.getPersistentDataContainer() + .set( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER, + uncategorized.id() + ); + + icon.setItemMeta( + meta + ); + + } + + menu.setItem( + 4, + icon + ); + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryMenuListener.java new file mode 100644 index 0000000..3dc30dd --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categorymenu/CategoryMenuListener.java @@ -0,0 +1,158 @@ +package com.rsscripting.rswarehouse.category.categorymenu; + + +import com.rsscripting.rswarehouse.category.categoryoptions.CategoryOptionsMenu; +import com.rsscripting.rswarehouse.autodeposit.AutoDepositMenu; +import com.rsscripting.rswarehouse.item.ItemsMenu; +import com.rsscripting.rswarehouse.navigation.NavigationManager; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.constants.RSKeys; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + + +public class CategoryMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + Player player = + (Player) event.getWhoClicked(); + + if (event.getView() + .getTopInventory() + .getHolder() + instanceof RSMenuHolder holder + && holder.getMenuId().equals( + "CATEGORIES" + )) { + + event.setCancelled( + true + ); + + ItemStack clicked = + event.getCurrentItem(); + + if (clicked == null) { + return; + } + + ItemMeta meta = + clicked.getItemMeta(); + + if (meta == null) { + return; + } + + RSMenuHolder menuHolder = + (RSMenuHolder) + event.getView() + .getTopInventory() + .getHolder(); + + int currentPage = + menuHolder.getPage(); + + if ( + event.getRawSlot() == 2 + ) { + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + session.setAutoDepositPage( + 1 + ); + + AutoDepositMenu.open( + player + ); + + return; + + } + + if ( + event.getRawSlot() + == 0 + ) { + + CategoryMenu.open( + player, + currentPage - 1 + ); + + return; + + } + + if ( + event.getRawSlot() + == 8 + ) { + + CategoryMenu.open( + player, + currentPage + 1 + ); + + return; + + } + + Integer categoryId = + meta.getPersistentDataContainer().get( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER + ); + + if (categoryId == null) { + return; + } + + if ( + player.isOp() + && event.getClick() + == ClickType.SHIFT_RIGHT + ) { + + CategoryOptionsMenu.open( + player, + categoryId + ); + + return; + + } + + String categoryName = + clicked.getItemMeta() + .getDisplayName(); + + NavigationManager.openItems( + player, + categoryId, + categoryName, + 0 + ); + + } + + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenu.java new file mode 100644 index 0000000..965a6e2 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenu.java @@ -0,0 +1,236 @@ +package com.rsscripting.rswarehouse.category.categoryoptions; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +public class CategoryOptionsMenu { + + public static void open( + Player player, + int categoryId + ) { + + Inventory menu = + Bukkit.createInventory( + new CategoryOptionsMenuHolder( + categoryId + ), + 27, + "Category Options" + ); + + ItemStack filler = + new ItemStack( + Material.LIGHT_BLUE_STAINED_GLASS_PANE + ); + + ItemMeta fillerMeta = + filler.getItemMeta(); + + fillerMeta.displayName( + Component.text( + " " + ) + ); + + filler.setItemMeta( + fillerMeta + ); + + for ( + int i = 0; + i <= 8; + i++ + ) { + + menu.setItem( + i, + filler + ); + + } + + ItemStack back = + new ItemStack( + Material.OAK_DOOR + ); + + ItemMeta backMeta = + back.getItemMeta(); + + backMeta.displayName( + Component.text( + "Back" + ).color( + NamedTextColor.GREEN + ) + ); + + back.setItemMeta( + backMeta + ); + + menu.setItem( + 4, + back + ); + + player.openInventory( + menu + ); + + ItemStack editName = + new ItemStack( + Material.NAME_TAG + ); + + ItemMeta editNameMeta = + editName.getItemMeta(); + + editNameMeta.displayName( + Component.text( + "Edit Display Name" + ).color( + NamedTextColor.YELLOW + ) + ); + + editName.setItemMeta( + editNameMeta + ); + + menu.setItem( + 9, + editName + ); + + ItemStack pageSlot = + new ItemStack( + Material.BOOK + ); + + ItemMeta pageSlotMeta = + pageSlot.getItemMeta(); + + pageSlotMeta.displayName( + Component.text( + "Assign Page / Slot" + ).color( + NamedTextColor.YELLOW + ) + ); + + pageSlot.setItemMeta( + pageSlotMeta + ); + + menu.setItem( + 11, + pageSlot + ); + + ItemStack editLore = + new ItemStack( + Material.WRITABLE_BOOK + ); + + ItemMeta editLoreMeta = + editLore.getItemMeta(); + + editLoreMeta.displayName( + Component.text( + "Edit Lore" + ).color( + NamedTextColor.YELLOW + ) + ); + + editLore.setItemMeta( + editLoreMeta + ); + + menu.setItem( + 13, + editLore + ); + + ItemStack material = + new ItemStack( + Material.ITEM_FRAME + ); + + ItemMeta materialMeta = + material.getItemMeta(); + + materialMeta.displayName( + Component.text( + "Change Material" + ).color( + NamedTextColor.YELLOW + ) + ); + + material.setItemMeta( + materialMeta + ); + + menu.setItem( + 15, + material + ); + + ItemStack delete = + new ItemStack( + Material.BARRIER + ); + + ItemMeta deleteMeta = + delete.getItemMeta(); + + deleteMeta.displayName( + Component.text( + "Delete Category" + ).color( + NamedTextColor.RED + ) + ); + + deleteMeta.lore( + java.util.List.of( + Component.text( + "Warning!!" + ).color( + NamedTextColor.RED + ), + Component.text( + "This cannot be undone." + ).color( + NamedTextColor.GRAY + ), + Component.empty(), + Component.text( + "Category must be empty." + ).color( + NamedTextColor.YELLOW + ) + ) + ); + + delete.setItemMeta( + deleteMeta + ); + + menu.setItem( + 17, + delete + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenuHolder.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenuHolder.java new file mode 100644 index 0000000..6a472db --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenuHolder.java @@ -0,0 +1,25 @@ +package com.rsscripting.rswarehouse.category.categoryoptions; + +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; + +public class CategoryOptionsMenuHolder + implements InventoryHolder { + + private final int categoryId; + + public CategoryOptionsMenuHolder( + int categoryId + ) { + this.categoryId = categoryId; + } + + public int getCategoryId() { + return categoryId; + } + + @Override + public Inventory getInventory() { + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenuListener.java new file mode 100644 index 0000000..3f04136 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/categoryoptions/CategoryOptionsMenuListener.java @@ -0,0 +1,242 @@ +package com.rsscripting.rswarehouse.category.categoryoptions; + +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryEditSessionManager; +import com.rsscripting.rswarehouse.admin.assignpageslot.CategoryPageNumberMenu; +import com.rsscripting.rswarehouse.admin.adminsessions.CategoryPageSlotSessionManager; +import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditDisplayNameMenu; +import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditLoreMenu; +import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditMaterialMenu; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class CategoryOptionsMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getView() + .getTopInventory() + .getHolder() + instanceof CategoryOptionsMenuHolder)) { + return; + } + + event.setCancelled( + true + ); + + Player player = + (Player) event.getWhoClicked(); + + if ( + event.getRawSlot() + == 4 + ) { + + CategoryMenu.open( + player + ); + + } + + if ( + event.getRawSlot() + == 9 + ) + { + + CategoryOptionsMenuHolder holder = + (CategoryOptionsMenuHolder) + event.getView() + .getTopInventory() + .getHolder(); + + CategoryEditSession session = + CategoryEditSessionManager.createSession( + player.getUniqueId(), + holder.getCategoryId() + ); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + holder.getCategoryId() + ); + + CategoryEditDisplayNameMenu.open( + player, + category.displayName() + ); + + return; + + } + + if ( + event.getRawSlot() + == 11 + ) { + + CategoryOptionsMenuHolder holder = + (CategoryOptionsMenuHolder) + event.getView() + .getTopInventory() + .getHolder(); + + CategoryPageSlotSessionManager.createSession( + player.getUniqueId(), + holder.getCategoryId() + ); + + CategoryPageNumberMenu.open( + player + ); + + return; + + } + + if ( + event.getRawSlot() + == 13 + ) + { + + CategoryOptionsMenuHolder holder = + (CategoryOptionsMenuHolder) + event.getView() + .getTopInventory() + .getHolder(); + + CategoryEditSessionManager.createSession( + player.getUniqueId(), + holder.getCategoryId() + ); + + CategoryEditLoreMenu.open( + player + ); + + return; + + } + + if ( + event.getRawSlot() + == 15 + ) + { + + CategoryOptionsMenuHolder holder = + (CategoryOptionsMenuHolder) + event.getView() + .getTopInventory() + .getHolder(); + + CategoryEditSessionManager.createSession( + player.getUniqueId(), + holder.getCategoryId() + ); + + CategoryEditMaterialMenu.open( + player, + 0 + ); + + return; + + } + + if ( + event.getRawSlot() + == 17 + ) + { + + CategoryOptionsMenuHolder holder = + (CategoryOptionsMenuHolder) + event.getView() + .getTopInventory() + .getHolder(); + + int categoryId = + holder.getCategoryId(); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + categoryId + ); + + if ( + category != null + && + category.internalName() + .equalsIgnoreCase( + "uncategorized" + ) + ) { + + player.sendMessage( + Component.text( + "Uncategorized cannot be deleted." + ).color( + NamedTextColor.RED + ) + ); + + return; + + } + + if ( + ItemDAO.categoryHasItems( + categoryId + ) + ) { + + player.sendMessage( + Component.text( + "Cannot delete category. Category not empty." + ).color( + NamedTextColor.RED + ) + ); + + return; + + } + + CategoryDAO.deleteCategory( + categoryId + ); + + player.sendMessage( + Component.text( + "Category deleted." + ).color( + NamedTextColor.GREEN + ) + ); + + CategoryMenu.open( + player + ); + + return; + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenu.java new file mode 100644 index 0000000..4ae16b8 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenu.java @@ -0,0 +1,196 @@ +package com.rsscripting.rswarehouse.category.copytocategory; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class CopyToCategoryMenu { + + public static final String MENU_TITLE = + "Copy To Category"; + + public static void open( + Player player, + int itemId, + int page + ) { + + Inventory menu = + Bukkit.createInventory( + new CopyToCategoryMenuHolder( + itemId, + page + ), + 54, + Component.text( + MENU_TITLE + ).color( + NamedTextColor.BLUE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int slot = 0; slot <= 8; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + for (int slot = 45; slot <= 53; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + List categories = + CategoryDAO.getCategories(); + + List displayCategories = + new ArrayList<>(); + + for (WarehouseCategory category : categories) { + displayCategories.add( + category + ); + } + + int pageSize = 36; + + int maxPage = + Math.max( + 0, + (displayCategories.size() - 1) + / pageSize + ); + + int startIndex = + page * pageSize; + + int endIndex = + Math.min( + startIndex + pageSize, + displayCategories.size() + ); + + boolean hasPrevious = + page > 0; + + boolean hasNext = + page < maxPage; + + if (hasPrevious) { + + menu.setItem( + 0, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aPrevious Page" + ) + ); + + } + + if (hasNext) { + + menu.setItem( + 8, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aNext Page" + ) + ); + + } + + int slot = 9; + + for ( + + int i = startIndex; + + i < endIndex; + + i++ + + ) { + + WarehouseCategory category = + displayCategories.get( + i + ); + + List lore = + new ArrayList<>(); + + if ( + category.lore() != null + && + !category.lore().isBlank() + ) { + + lore.addAll( + Arrays.asList( + category.lore().split("\n") + ) + ); + + } + + ItemStack icon = + RSMenuUtils.createMenuItemWithLore( + Material.valueOf( + category.material() + ), + "§a" + category.displayName(), + lore + ); + + ItemMeta meta = + icon.getItemMeta(); + + meta.getPersistentDataContainer().set( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER, + category.id() + ); + + icon.setItemMeta( + meta + ); + + menu.setItem( + slot++, + icon + ); + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenuHolder.java b/src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenuHolder.java new file mode 100644 index 0000000..138ccad --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenuHolder.java @@ -0,0 +1,41 @@ +package com.rsscripting.rswarehouse.category.copytocategory; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; + +public class CopyToCategoryMenuHolder + extends RSMenuHolder { + + private final int itemId; + + private final int page; + + public CopyToCategoryMenuHolder( + int itemId, + int page + ) { + + super( + "COPY_TO_CATEGORY" + ); + + this.itemId = + itemId; + + this.page = + page; + + } + + public int getItemId() { + + return itemId; + + } + + public int getPage() { + + return page; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenuListener.java new file mode 100644 index 0000000..f7fcec1 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/copytocategory/CopyToCategoryMenuListener.java @@ -0,0 +1,143 @@ +package com.rsscripting.rswarehouse.category.copytocategory; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.placement.placementdao.ItemPlacementDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.item.ItemsMenu; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +public class CopyToCategoryMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getWhoClicked() + instanceof Player player)) { + + return; + + } + + if (!(event.getInventory() + .getHolder() + instanceof CopyToCategoryMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "COPY_TO_CATEGORY" + )) { + + return; + + } + + event.setCancelled( + true + ); + + ItemStack clicked = + event.getCurrentItem(); + + if (clicked == null) { + + return; + + } + + ItemMeta meta = + clicked.getItemMeta(); + + if ( + clicked.getType() == Material.ARROW + ) { + + String name = + clicked.getItemMeta() + .getDisplayName(); + + if (name.equals("§aPrevious Page")) { + + CopyToCategoryMenu.open( + player, + holder.getItemId(), + holder.getPage() - 1 + ); + + return; + + } + + if (name.equals("§aNext Page")) { + + CopyToCategoryMenu.open( + player, + holder.getItemId(), + holder.getPage() + 1 + ); + + return; + + } + + } + + if (meta == null) { + + return; + + } + + Integer categoryId = + meta.getPersistentDataContainer().get( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER + ); + + if (categoryId == null) { + + return; + + } + + ItemPlacementDAO.copyItemToCategory( + holder.getItemId(), + categoryId + ); + + player.sendMessage( + "§aItem copied successfully." + ); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + categoryId + ); + + if (category != null) { + + ItemsMenu.open( + player, + category.id(), + category.displayName(), + 0 + ); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenu.java b/src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenu.java new file mode 100644 index 0000000..a17d835 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenu.java @@ -0,0 +1,265 @@ +package com.rsscripting.rswarehouse.category.movetocategory; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.utils.MenuAutoCenterAndPagenation; +import com.rsscripting.rswarehouse.constants.RSKeys; + +import org.bukkit.Material; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.persistence.PersistentDataType; + +import java.util.Arrays; + +import java.util.ArrayList; +import java.util.List; + +public class MoveToCategoryMenu { + + public static final String MENU_TITLE = + "Move Item To Category"; + + public static void open( + Player player, + int itemId + ) { + + Inventory menu = + Bukkit.createInventory( + new MoveToCategoryMenuHolder( + itemId + ), + 54, + Component.text( + MENU_TITLE + ).color( + NamedTextColor.BLUE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int slot = 0; slot <= 8; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + for (int slot = 45; slot <= 53; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + List categories = + CategoryDAO.getCategories(); + + WarehouseCategory uncategorized = null; + + List displayCategories = + new ArrayList<>(); + + for (WarehouseCategory category : categories) { + + if (category.displayName().equalsIgnoreCase( + "Uncategorized" + )) { + + uncategorized = category; + + } + + else { + + displayCategories.add( + category + ); + + } + + } + + int categoryIndex = 0; + + for (int row = 0; + row < 4; + row++) { + + int remaining = + displayCategories.size() + - categoryIndex; + + if (remaining <= 0) { + break; + } + + int itemsThisRow; + + if (remaining > 9) { + + itemsThisRow = 9; + + } + + else { + + itemsThisRow = remaining; + + } + + List rowSlots = + MenuAutoCenterAndPagenation + .getCenteredRowSlots( + itemsThisRow + ); + + if (itemsThisRow == 9) { + + rowSlots = List.of( + 0, 1, 2, 3, 4, 5, 6, 7, 8 + ); + + } + + int rowOffset = + 9 + (row * 9); + + for (int slot : rowSlots) { + + if (categoryIndex >= + displayCategories.size()) { + + break; + + } + + WarehouseCategory category = + displayCategories.get( + categoryIndex + ); + + List lore = + new ArrayList<>(); + + if ( + category.lore() != null + && !category.lore().isBlank() + ) { + + lore.addAll( + Arrays.asList( + category.lore() + .split("\n") + ) + ); + + } + + ItemStack icon = + RSMenuUtils.createMenuItemWithLore( + Material.valueOf( + category.material() + ), + "§a" + category.displayName(), + lore + ); + + ItemMeta meta = + icon.getItemMeta(); + + if (meta != null) { + + meta.addItemFlags( + ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_ADDITIONAL_TOOLTIP + ); + + meta.getPersistentDataContainer().set( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER, + category.id() + ); + + icon.setItemMeta( + meta + ); + + } + + menu.setItem( + rowOffset + slot, + icon + ); + + categoryIndex++; + + } + + } + + if (uncategorized != null) { + + ItemStack icon = + RSMenuUtils.createMenuItem( + Material.valueOf( + uncategorized.material() + ), + "§a" + uncategorized.displayName() + ); + + ItemMeta meta = + icon.getItemMeta(); + + if (meta != null) { + + meta.addItemFlags( + ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_ADDITIONAL_TOOLTIP + ); + + meta.getPersistentDataContainer().set( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER, + uncategorized.id() + ); + + icon.setItemMeta( + meta + ); + + } + + menu.setItem( + 4, + icon + ); + + } + + + + + + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenuHolder.java b/src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenuHolder.java new file mode 100644 index 0000000..f8dc013 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenuHolder.java @@ -0,0 +1,29 @@ +package com.rsscripting.rswarehouse.category.movetocategory; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; + +public class MoveToCategoryMenuHolder + extends RSMenuHolder { + + private final int itemId; + + public MoveToCategoryMenuHolder( + int itemId + ) { + + super( + "MOVE_TO_CATEGORY" + ); + + this.itemId = + itemId; + + } + + public int getItemId() { + + return itemId; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenuListener.java new file mode 100644 index 0000000..95ef0ee --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/category/movetocategory/MoveToCategoryMenuListener.java @@ -0,0 +1,108 @@ +package com.rsscripting.rswarehouse.category.movetocategory; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.placement.placementdao.ItemPlacementDAO; +import com.rsscripting.rswarehouse.item.ItemsMenu; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.constants.RSKeys; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +public class MoveToCategoryMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getWhoClicked() + instanceof Player player)) { + + return; + + } + + if (!(event.getInventory() + .getHolder() + instanceof MoveToCategoryMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "MOVE_TO_CATEGORY" + )) { + + return; + + } + + event.setCancelled( + true + ); + + ItemStack clicked = + event.getCurrentItem(); + + if (clicked == null) { + + return; + + } + + ItemMeta meta = + clicked.getItemMeta(); + + if (meta == null) { + + return; + + } + + Integer categoryId = + meta.getPersistentDataContainer().get( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER + ); + + if (categoryId == null) { + + return; + + } + + ItemPlacementDAO.moveItemToCategory( + holder.getItemId(), + categoryId + ); + + player.sendMessage( + "§aItem moved successfully." + ); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + categoryId + ); + + if (category != null) { + + ItemsMenu.open( + player, + category.id(), + category.displayName(), + 0 + ); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/chestautoprocess/ChestAutoProcessingTask.java b/src/main/java/com/rsscripting/rswarehouse/chestautoprocess/ChestAutoProcessingTask.java new file mode 100644 index 0000000..3d7c7c3 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/chestautoprocess/ChestAutoProcessingTask.java @@ -0,0 +1,91 @@ +package com.rsscripting.rswarehouse.chestautoprocess; + +import com.rsscripting.rswarehouse.deposit.dao.ChestDAO; +import com.rsscripting.rswarehouse.deposit.dao.WarehouseChestDAO; +import org.bukkit.block.Chest; +import org.bukkit.entity.Player; +import org.bukkit.scheduler.BukkitRunnable; +import com.rsscripting.rswarehouse.deposit.WarehouseChestProcessor; +import org.bukkit.block.Block; + +import java.util.List; + +public class ChestAutoProcessingTask + extends BukkitRunnable { + + @Override + public void run() { + + List chests = + WarehouseChestDAO.getAllWarehouseChests(); + + for (Block block : chests) { + + if (!block.getChunk().isLoaded()) { + + continue; + + } + + if (!(block.getState() + instanceof Chest chest)) { + + continue; + + } + + String ownerName = + ChestDAO.getOwnerName( + chest.getBlock() + ); + + String ownerUuid = + ChestDAO.getOwnerUuid( + chest.getBlock() + ); + + int[] results = + WarehouseChestProcessor.processWarehouseChest( + chest + ); + + int processedStacks = + results[0]; + + int processedItems = + results[1]; + + if (processedStacks <= 0) { + + continue; + + } + + Player owner = + ChestDAO.getOnlineOwner( + chest + ); + + if (owner == null) { + + continue; + + } + + owner.sendMessage( + "§aYour Community Warehouse processed " + + processedItems + + " item" + + (processedItems == 1 ? "" : "s") + + " from " + + processedStacks + + " stack" + + (processedStacks == 1 ? "" : "s") + + "." + ); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/commands/RSPluginCommand.java b/src/main/java/com/rsscripting/rswarehouse/commands/RSPluginCommand.java new file mode 100644 index 0000000..1a95bf9 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/commands/RSPluginCommand.java @@ -0,0 +1,134 @@ +package com.rsscripting.rswarehouse.commands; + +import com.rsscripting.rswarehouse.config.ConfigManager; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.constants.RSConstants; +import com.rsscripting.rswarehouse.navigation.NavigationManager; +import com.rsscripting.rswarehouse.utils.VersionUtils; +import org.bukkit.entity.Player; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.jetbrains.annotations.NotNull; + +public class RSPluginCommand + implements CommandExecutor { + + + + @Override + public boolean onCommand( + + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String @NotNull [] args + + ) { + + /* + |-------------------------------------------------------------------------- + | BASE COMMAND + |-------------------------------------------------------------------------- + */ + + if (args.length == 0) { + + sender.sendMessage( + RSConstants.PREFIX + + "Running " + + RSConstants.PLUGIN_NAME + ); + + return true; + + } + + /* + |-------------------------------------------------------------------------- + | RELOAD COMMAND + |-------------------------------------------------------------------------- + */ + + if (args[0].equalsIgnoreCase( + "reload" + )) { + + if (!sender.hasPermission( + RSConstants.ADMIN_PERMISSION + )) { + + sender.sendMessage( + RSConstants.PREFIX + + "No permission." + ); + + return true; + + } + + ConfigManager.reload(); + + sender.sendMessage( + RSConstants.PREFIX + + "Configuration reloaded." + ); + + return true; + + } + + /* + |-------------------------------------------------------------------------- + | OPEN COMMAND + |-------------------------------------------------------------------------- + */ + + if (args[0].equalsIgnoreCase( + "open" + )) { + + if (!(sender instanceof Player player)) { + + sender.sendMessage( + RSConstants.PREFIX + + "Players only." + ); + + return true; + + } + + NavigationManager.clear(player); + NavigationManager.openCategory(player, 1); + + return true; + + } + + /* + |-------------------------------------------------------------------------- + | VERSION COMMAND + |-------------------------------------------------------------------------- + */ + + if (args[0].equalsIgnoreCase( + "version" + )) { + + sender.sendMessage( + RSConstants.PREFIX + + RSConstants.PLUGIN_NAME + + " v" + + VersionUtils.getVersion() + ); + + return true; + + } + + return true; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/commands/RSTabCompleter.java b/src/main/java/com/rsscripting/rswarehouse/commands/RSTabCompleter.java new file mode 100644 index 0000000..4611d85 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/commands/RSTabCompleter.java @@ -0,0 +1,48 @@ +package com.rsscripting.rswarehouse.commands; + +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.command.TabCompleter; +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; +import java.util.List; + +public class RSTabCompleter + implements TabCompleter { + + @Override + public List onTabComplete( + + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String @NotNull [] args + + + ) { + + List completions = + new ArrayList<>(); + + /* + |-------------------------------------------------------------------------- + | FIRST ARGUMENT + |-------------------------------------------------------------------------- + */ + + if (args.length == 1) { + + completions.add("reload"); + + completions.add("version"); + + completions.add("open"); + + } + + return completions; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/commands/ShopCommand.java b/src/main/java/com/rsscripting/rswarehouse/commands/ShopCommand.java new file mode 100644 index 0000000..8cfcfd1 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/commands/ShopCommand.java @@ -0,0 +1,36 @@ +package com.rsscripting.rswarehouse.commands; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.deposit.DepositInventory; +import com.rsscripting.rswarehouse.navigation.NavigationManager; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.jetbrains.annotations.NotNull; + +public class ShopCommand implements CommandExecutor { + + @Override + public boolean onCommand( + @NotNull CommandSender sender, + @NotNull Command command, + @NotNull String label, + @NotNull String[] args + ) { + + if (!(sender instanceof Player player)) { + return true; + } + + if (args.length == 1 && args[0].equalsIgnoreCase("deposit")) { + DepositInventory.open(player); + return true; + } + + NavigationManager.clear(player); + NavigationManager.openCategory(player, 1); + + return true; + } +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/config/ConfigManager.java b/src/main/java/com/rsscripting/rswarehouse/config/ConfigManager.java new file mode 100644 index 0000000..9a24b2e --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/config/ConfigManager.java @@ -0,0 +1,96 @@ +package com.rsscripting.rswarehouse.config; + +import com.rsscripting.rswarehouse.RSWarehouse; +import org.bukkit.configuration.file.FileConfiguration; + +public class ConfigManager { + + private static FileConfiguration config; + + /* + |-------------------------------------------------------------------------- + | SETUP + |-------------------------------------------------------------------------- + */ + + public static void setup() { + + RSWarehouse.getInstance() + .saveDefaultConfig(); + + config = + RSWarehouse.getInstance() + .getConfig(); + + } + + /* + |-------------------------------------------------------------------------- + | RELOAD + |-------------------------------------------------------------------------- + */ + + public static void reload() { + + RSWarehouse.getInstance() + .reloadConfig(); + + config = + RSWarehouse.getInstance() + .getConfig(); + + } + + /* + |-------------------------------------------------------------------------- + | GET CONFIG + |-------------------------------------------------------------------------- + */ + + public static FileConfiguration get() { + + return config; + + } + + /* + | Warehouse Chest name + */ + + public String getWarehouseChestName() { + + return config.getString( + "warehouse-chest-name", + "Community Warehouse" + ); + + } + + /* + | Uncateforized enabled + */ + + public boolean isUncategorizedEnabled() { + + return config.getBoolean( + "allow-uncategorized-item-creation", + true + ); + + } + + /* + | Chest Protection Enabled + */ + + public boolean isWarehouseChestProtectionEnabled() { + + return config.getBoolean( + "protect-warehouse-chests", + true + ); + + } + + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/constants/RSConstants.java b/src/main/java/com/rsscripting/rswarehouse/constants/RSConstants.java new file mode 100644 index 0000000..0a4ebba --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/constants/RSConstants.java @@ -0,0 +1,74 @@ +package com.rsscripting.rswarehouse.constants; + +import org.bukkit.Material; + +public class RSConstants { + + /* + |-------------------------------------------------------------------------- + | PLUGIN INFO + |-------------------------------------------------------------------------- + */ + + public static final String PLUGIN_NAME = + "RS-Warehouse"; + + public static final String PREFIX = + "§7[§cRS-Warehouse§7] §r"; + + public static final String COMMAND_ALIAS = + "rswarehouse"; + + /* + |-------------------------------------------------------------------------- + | GITHUB + |-------------------------------------------------------------------------- + */ + + public static final String GITHUB_USER = + "RS-Scripting"; + + public static final String GITHUB_REPOSITORY = + "RS-Warehouse"; + + /* + |-------------------------------------------------------------------------- + | PERMISSIONS + |-------------------------------------------------------------------------- + */ + + public static final String ADMIN_PERMISSION = + "rswarehouse.admin"; + + public static final String BYPASS_PERMISSION = + "rswarehouse.bypass"; + + /* + |-------------------------------------------------------------------------- + | REQUIRED CONVERSION ITEMS + |-------------------------------------------------------------------------- + */ + + public static final Material REQUIRED_HELD_ITEM = + Material.STICK; + + /* + |-------------------------------------------------------------------------- + | REQUIRED TARGET ENTITY + |-------------------------------------------------------------------------- + */ + + public static final Material + REQUIRED_TARGET_BLOCK = + Material.CHEST; + + /* + |-------------------------------------------------------------------------- + | MENU SETTINGS + |-------------------------------------------------------------------------- + */ + + public static final Material MENU_FILLER_MATERIAL = + Material.WHITE_STAINED_GLASS_PANE; + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/constants/RSKeys.java b/src/main/java/com/rsscripting/rswarehouse/constants/RSKeys.java new file mode 100644 index 0000000..b135ee6 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/constants/RSKeys.java @@ -0,0 +1,48 @@ +package com.rsscripting.rswarehouse.constants; + +import org.bukkit.NamespacedKey; + +import com.rsscripting.rswarehouse.RSWarehouse; + +public class RSKeys { + + public static final String FILTER_ALLOW_ALL = + "allow_all"; + + public static final String FILTER_WHITELIST = + "whitelist"; + + public static final String FILTER_BLACKLIST = + "blacklist"; + + public static final NamespacedKey CATEGORY_ID = + new NamespacedKey( + RSWarehouse.getInstance(), + "category_id" + ); + + public static final NamespacedKey ITEM_ID = + new NamespacedKey( + RSWarehouse.getInstance(), + "item_id" + ); + + public static final NamespacedKey DAMAGED_VARIANT_ID = + new NamespacedKey( + RSWarehouse.getInstance(), + "damaged_variant_id" + ); + + public static final NamespacedKey PARTIALLY_FILLED_VARIANT_ID = + new NamespacedKey( + RSWarehouse.getInstance(), + "partially_filled_variant_id" + ); + + public static final NamespacedKey ENCHANTED_VARIANT_ID = + new NamespacedKey( + RSWarehouse.getInstance(), + "enchanted_variant_id" + ); + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/conversion/ConvertMenu.java b/src/main/java/com/rsscripting/rswarehouse/conversion/ConvertMenu.java new file mode 100644 index 0000000..50cd979 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/conversion/ConvertMenu.java @@ -0,0 +1,67 @@ +package com.rsscripting.rswarehouse.conversion; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class ConvertMenu { + + public static final String MENU_TITLE = "Activate Warehouse Chest"; + + public static void open( + Player player + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "CONVERT" + ), + 9, + Component.text( + MENU_TITLE + ).color( + NamedTextColor.BLUE + ) + ); + + /* + |-------------------------------------------------------------------------- + | FILLER + |-------------------------------------------------------------------------- + */ + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem(i, filler); + + } + + /* + |-------------------------------------------------------------------------- + | CONVERT BUTTON + |-------------------------------------------------------------------------- + */ + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.CRAFTING_TABLE, + "§aConvert" + ) + ); + + player.openInventory(menu); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/conversion/ConvertMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/conversion/ConvertMenuListener.java new file mode 100644 index 0000000..b100021 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/conversion/ConvertMenuListener.java @@ -0,0 +1,293 @@ +package com.rsscripting.rswarehouse.conversion; + +import com.rsscripting.rswarehouse.deposit.dao.ChestDAO; +import com.rsscripting.rswarehouse.deposit.dao.WarehouseChestDAO; +import com.rsscripting.rswarehouse.deposit.dao.VerifyIsChestDAO; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.main.MainMenu; +import com.rsscripting.rswarehouse.constants.RSConstants; +import com.rsscripting.rswarehouse.navigation.NavigationManager; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; + +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.block.Block; +import org.bukkit.block.Chest; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerInteractEvent; +import org.bukkit.inventory.EquipmentSlot; +import org.bukkit.inventory.ItemStack; +import org.bukkit.block.DoubleChest; +import org.bukkit.inventory.InventoryHolder; + +public class ConvertMenuListener + implements Listener { + + @EventHandler + public void onPlayerInteractBlock( + PlayerInteractEvent event + ) { + + Player player = + event.getPlayer(); + + if (event.getHand() != EquipmentSlot.HAND) { + return; + } + + Block block = + event.getClickedBlock(); + + if (block == null) { + return; + } + + /* + |-------------------------------------------------------------------------- + | REQUIRE SNEAKING + |-------------------------------------------------------------------------- + */ + + if (!player.isSneaking()) { + return; + } + + /* + |-------------------------------------------------------------------------- + | VALIDATE TARGET ENTITY + |-------------------------------------------------------------------------- + */ + + if (block.getType() != + RSConstants.REQUIRED_TARGET_BLOCK) { + return; + } + + /* + |-------------------------------------------------------------------------- + | VALIDATE HELD ITEM + |-------------------------------------------------------------------------- + */ + + ItemStack heldItem = + player.getInventory() + .getItemInMainHand(); + + if (heldItem.getType() != + RSConstants.REQUIRED_HELD_ITEM) { + return; + } + + /* + |-------------------------------------------------------------------------- + | CANCEL VANILLA ACTION + |-------------------------------------------------------------------------- + */ + + event.setCancelled(true); + + /* + |-------------------------------------------------------------------------- + | STORE SELECTED ENTITY + |-------------------------------------------------------------------------- + */ + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + Block warehouseBlock = + WarehouseChestDAO.getWarehouseChest( + block + ); + + if (warehouseBlock != null) { + + session.setSelectedBlock( + warehouseBlock + ); + + } + else { + + session.setSelectedBlock( + block + ); + + } + + /* +|-------------------------------------------------------------------------- +| ALREADY CONVERTED +|-------------------------------------------------------------------------- +*/ + + boolean warehouseChest = + VerifyIsChestDAO.isWarehouseChest( + block + ); + + if (!warehouseChest + && block.getState() + instanceof Chest chest) { + + InventoryHolder holder = + chest.getInventory() + .getHolder(); + + if (holder instanceof DoubleChest doubleChest) { + + if (doubleChest.getLeftSide() + instanceof Chest leftChest + && VerifyIsChestDAO.isWarehouseChest( + leftChest.getBlock() + )) { + + warehouseChest = true; + + } + + if (doubleChest.getRightSide() + instanceof Chest rightChest + && VerifyIsChestDAO.isWarehouseChest( + rightChest.getBlock() + )) { + + warehouseChest = true; + + } + + } + + } + + if (warehouseChest) { + + Block selectedBlock = + WarehouseChestDAO.getWarehouseChest( + block + ); + + if (selectedBlock == null) { + + selectedBlock = block; + + } + + if ( + + player.isOp() + + || + + ChestDAO.isOwner( + selectedBlock, + player + ) + + ) { + + NavigationManager.clear(player); + + GuiSessionManager + .getSession(player) + .setSelectedBlock(selectedBlock); + + NavigationManager.openMain(player); + + } + + else { + + CategoryMenu.open( + player + ); + + } + + return; + + } + + /* + |-------------------------------------------------------------------------- + | OPEN CONVERSION MENU + |-------------------------------------------------------------------------- + */ + + ConvertMenu.open(player); + + } + + /* + |-------------------------------------------------------------------------- + | GET SELECTED ENTITY + |-------------------------------------------------------------------------- + */ + + public Block getSelectedBlock( + Player player + ) { + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + return session.getSelectedBlock(); + + } + + /* + |-------------------------------------------------------------------------- + | Convert Back + |-------------------------------------------------------------------------- + */ + + public void convertBack( + Player player + ) { + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + Block block = + session.getSelectedBlock(); + + if (block == null) { + + player.closeInventory(); + + return; + + } + + WarehouseChestDAO.unregisterChest( + block + ); + + if (block.getState() instanceof Chest chest) { + + chest.customName( + null + ); + + chest.update(); + + } + + RSMessageUtils.success( + player, + "Warehouse Chest removed." + ); + + player.closeInventory(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/database/DatabaseManager.java b/src/main/java/com/rsscripting/rswarehouse/database/DatabaseManager.java new file mode 100644 index 0000000..5574ab4 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/database/DatabaseManager.java @@ -0,0 +1,97 @@ +package com.rsscripting.rswarehouse.database; + +import org.bukkit.plugin.java.JavaPlugin; + +import java.io.File; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.SQLException; +import java.util.logging.Level; + +public class DatabaseManager { + + private static JavaPlugin plugin; + + private static String databaseUrl; + + public static void initialize( + JavaPlugin pluginInstance + ) { + + plugin = pluginInstance; + + createDatabase(); + + DatabaseTableCreator.createTables( + plugin, + databaseUrl + ); + + DatabaseUpdater.updateDatabase( + plugin, + databaseUrl + ); + + } + + private static void createDatabase() { + + try { + + File databaseFile = + new File( + plugin.getDataFolder(), + "database.db" + ); + + if (!plugin.getDataFolder().exists()) { + + if (!plugin.getDataFolder().mkdirs()) { + + plugin.getLogger().severe( + "Failed to create plugin data folder." + ); + + return; + + } + + } + + databaseUrl = + "jdbc:sqlite:" + + databaseFile.getAbsolutePath(); + + Connection connection = + DriverManager.getConnection( + databaseUrl + ); + + connection.close(); + + plugin.getLogger().info( + "SQLite database initialized." + ); + + } catch (Exception e) { + + plugin.getLogger().log( + Level.SEVERE, + "Failed to initialize database.", + e + ); + + } + + } + + public static Connection getConnection() + throws SQLException { + + return DriverManager.getConnection( + databaseUrl + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/database/DatabaseTableCreator.java b/src/main/java/com/rsscripting/rswarehouse/database/DatabaseTableCreator.java new file mode 100644 index 0000000..05957db --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/database/DatabaseTableCreator.java @@ -0,0 +1,197 @@ +package com.rsscripting.rswarehouse.database; + +import org.bukkit.plugin.java.JavaPlugin; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.util.logging.Level; + +public class DatabaseTableCreator { + + public static void createTables( + JavaPlugin plugin, + String databaseUrl + ) { + + try ( + + Connection connection = + DriverManager.getConnection( + databaseUrl + ) + + ) { + + connection.createStatement().execute( + """ + CREATE TABLE IF NOT EXISTS warehouse_chests ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + world TEXT NOT NULL, + x INTEGER NOT NULL, + y INTEGER NOT NULL, + z INTEGER NOT NULL, + owner_uuid TEXT NOT NULL, + owner_name TEXT NOT NULL, + created_at TEXT NOT NULL + + ) + """ + ); + + connection.createStatement().execute( + """ + CREATE TABLE IF NOT EXISTS warehouse_items ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + category_id INTEGER NOT NULL, + serialized_item TEXT NOT NULL, + default_lore TEXT, + inventory_id INTEGER, + subcategory_id INTEGER, + page INTEGER, + slot INTEGER, + created_at TEXT NOT NULL + ) + """ + ); + + connection.createStatement().execute( + """ + CREATE TABLE IF NOT EXISTS warehouse_categories ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + parent_category_id INTEGER, + internal_name TEXT NOT NULL UNIQUE, + display_name TEXT NOT NULL, + material TEXT NOT NULL, + lore TEXT, + display_order INTEGER NOT NULL DEFAULT 0, + page INTEGER NOT NULL DEFAULT 0, + slot INTEGER NOT NULL DEFAULT 0 + ) + """ + ); + + connection.createStatement().execute( + """ + INSERT OR IGNORE INTO warehouse_categories ( + internal_name, + display_name, + material, + display_order, + page, + slot + ) + VALUES ( + 'uncategorized', + 'Uncategorized', + 'CHEST', + 0, + 0, + 4 + ) + + """ + ); + + connection.createStatement().execute( + """ + + CREATE TABLE IF NOT EXISTS warehouse_inventory ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + serialized_item TEXT NOT NULL, + quantity INTEGER NOT NULL, + discoverer_uuid TEXT NULL, + discoverer_name TEXT NULL, + discovered_date TEXT NULL, + lore TEXT + ) + """ + ); + + connection.createStatement().execute( + """ + + CREATE TABLE IF NOT EXISTS partially_filled_variants ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + parent_inventory_id INTEGER NOT NULL, + serialized_item TEXT NOT NULL, + quantity INTEGER NOT NULL, + lore TEXT, + FOREIGN KEY(parent_inventory_id) + REFERENCES warehouse_inventory(id) + ON DELETE CASCADE + ) + """ + ); + + connection.createStatement().execute( + """ + CREATE TABLE IF NOT EXISTS damaged_variants ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + parent_inventory_id INTEGER NOT NULL, + serialized_item TEXT NOT NULL, + quantity INTEGER NOT NULL, + lore TEXT + ) + """ + ); + + connection.createStatement().execute( + """ + CREATE TABLE IF NOT EXISTS enchanted_variants ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + parent_inventory_id INTEGER NOT NULL, + serialized_item TEXT NOT NULL, + quantity INTEGER NOT NULL, + lore TEXT + ) + """ + ); + + connection.createStatement().execute( + """ + CREATE TABLE IF NOT EXISTS auto_deposit_settings ( + player_uuid TEXT PRIMARY KEY, + enabled INTEGER NOT NULL DEFAULT 0 + ) + """ + ); + + connection.createStatement().execute( + """ + CREATE TABLE IF NOT EXISTS auto_deposit_filters ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + player_uuid TEXT NOT NULL, + serialized_item TEXT NOT NULL + ) + """ + ); + + connection.createStatement().execute( + """ + CREATE UNIQUE INDEX IF NOT EXISTS + idx_auto_deposit_filter + ON auto_deposit_filters ( + player_uuid, + serialized_item + ) + """ + ); + + + plugin.getLogger().info( + "Database tables initialized." + ); + + } catch (Exception e) { + + plugin.getLogger().log( + Level.SEVERE, + "Failed to create tables.", + e + ); + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/database/DatabaseUpdater.java b/src/main/java/com/rsscripting/rswarehouse/database/DatabaseUpdater.java new file mode 100644 index 0000000..6cd76e9 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/database/DatabaseUpdater.java @@ -0,0 +1,102 @@ +package com.rsscripting.rswarehouse.database; + +import org.bukkit.plugin.java.JavaPlugin; + +import java.sql.Connection; +import java.sql.DriverManager; +import java.util.logging.Level; + +public class DatabaseUpdater { + + public static void updateDatabase( + JavaPlugin plugin, + String databaseUrl + ) { + + try ( + + Connection connection = + DriverManager.getConnection( + databaseUrl + ) + + ) { + + ensureColumnExists( + connection, + "warehouse_items", + "page", + "INTEGER" + ); + + ensureColumnExists( + connection, + "warehouse_items", + "slot", + "INTEGER" + ); + + } + + catch (Exception e) { + + plugin.getLogger().log( + Level.SEVERE, + "Failed updating database.", + e + ); + + } + + } + + private static void ensureColumnExists( + Connection connection, + String table, + String column, + String definition + ) { + + try ( + + var columns = + connection + .getMetaData() + .getColumns( + null, + null, + table, + column + ) + + ) { + + if (!columns.next()) { + + connection.createStatement().execute( + "ALTER TABLE " + + table + + " ADD COLUMN " + + column + + " " + + definition + ); + + } + + } catch (Exception e) { + + JavaPlugin.getProvidingPlugin( + DatabaseUpdater.class + ).getLogger().log( + Level.SEVERE, + "Failed updating column " + + column, + e + ); + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/deposit/DepositInventory.java b/src/main/java/com/rsscripting/rswarehouse/deposit/DepositInventory.java new file mode 100644 index 0000000..fd6e080 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/deposit/DepositInventory.java @@ -0,0 +1,25 @@ +package com.rsscripting.rswarehouse.deposit; + +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; + +public final class DepositInventory { + + private static final String TITLE = "Warehouse Deposit"; + + private DepositInventory() { + } + + public static void open(Player player) { + + Inventory inventory = Bukkit.createInventory( + new DepositInventoryHolder(), + 54, + TITLE + ); + + player.openInventory(inventory); + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/deposit/DepositInventoryHolder.java b/src/main/java/com/rsscripting/rswarehouse/deposit/DepositInventoryHolder.java new file mode 100644 index 0000000..811568f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/deposit/DepositInventoryHolder.java @@ -0,0 +1,12 @@ +package com.rsscripting.rswarehouse.deposit; + +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; + +public final class DepositInventoryHolder implements InventoryHolder { + + @Override + public Inventory getInventory() { + return null; + } +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/deposit/WarehouseChestProcessor.java b/src/main/java/com/rsscripting/rswarehouse/deposit/WarehouseChestProcessor.java new file mode 100644 index 0000000..dcf902f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/deposit/WarehouseChestProcessor.java @@ -0,0 +1,349 @@ +package com.rsscripting.rswarehouse.deposit; + +import com.rsscripting.rswarehouse.deposit.dao.ChestDAO; +import com.rsscripting.rswarehouse.inventory.inventorydao.InventoryCreationDAO; +import com.rsscripting.rswarehouse.inventory.inventorydao.InventoryLookupDAO; +import com.rsscripting.rswarehouse.variants.dao.DamagedVariantsDAO; +import com.rsscripting.rswarehouse.variants.dao.EnchantedVariantsDAO; +import com.rsscripting.rswarehouse.variants.dao.PartiallyFilledVariantsDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.config.ConfigManager; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.block.Chest; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; + +public class WarehouseChestProcessor { + + public static int[] processWarehouseChest( + Chest chest + ) { + + int processedStacks = 0; + int processedItems = 0; + + String ownerUuid = + ChestDAO.getOwnerUuid( + chest.getBlock() + ); + + String ownerName = + ChestDAO.getOwnerName( + chest.getBlock() + ); + + ItemStack[] contents = + chest.getInventory() + .getContents(); + + boolean allowUncategorizedItemCreation = + ConfigManager.get() + .getBoolean( + "allow-uncategorized-item-creation" + ); + + boolean allowDamagedItemCreation = + ConfigManager.get() + .getBoolean( + "allow-damaged-item-creation" + ); + + for (ItemStack item : contents) { + + if (item == null) { + + continue; + + } + + int amount = + item.getAmount(); + + ItemStack baseItem = + ItemStackUtils.createBaseItem( + item + ); + + Integer parentId = + InventoryLookupDAO.findInventoryId( + baseItem + ); + + if (parentId == null) { + + if (!allowUncategorizedItemCreation) { + + continue; + + } + + parentId = + InventoryCreationDAO.createParentInventoryItem( + baseItem, + ownerUuid, + ownerName + ); + + } + + /* + * Damaged item test path + */ + + if ( + item.hasItemMeta() + && item.getItemMeta() + instanceof Damageable damageable + && damageable.getDamage() > 0 + ) { + + if (!allowDamagedItemCreation) { + + continue; + + } + + DamagedVariantsDAO.createDamagedVariant( + parentId, + item + ); + + item.setAmount( + 0 + ); + + processedStacks++; + processedItems += amount; + + continue; + + } + + /* + * Enchanted item test path + */ + + if ( + item.hasItemMeta() + && item.getItemMeta().hasEnchants() + ) { + + EnchantedVariantsDAO.createEnchantedVariant( + parentId, + item + ); + + item.setAmount( + 0 + ); + + processedStacks++; + processedItems += amount; + + continue; + + } + + /* + * Partially Filled item test path + */ + + if ( + ItemStackUtils.hasStoredContents( + item + ) + ) { + + PartiallyFilledVariantsDAO.createPartiallyFilledVariant( + parentId, + item + ); + + item.setAmount( + 0 + ); + + processedStacks++; + processedItems += amount; + + continue; + + } + + + ItemDAO.addItem( + ownerUuid, + ownerName, + baseItem, + item.getAmount(), + parentId + ); + + item.setAmount( + 0 + ); + + processedStacks++; + processedItems += amount; + + } + + return new int[] { + processedStacks, + processedItems + }; + + } + + public static int[] processDepositInventory( + Inventory inventory, + String ownerUuid, + String ownerName + ) { + + int processedStacks = 0; + int processedItems = 0; + + ItemStack[] contents = + inventory.getContents(); + + boolean allowUncategorizedItemCreation = + ConfigManager.get() + .getBoolean( + "allow-uncategorized-item-creation" + ); + + boolean allowDamagedItemCreation = + ConfigManager.get() + .getBoolean( + "allow-damaged-item-creation" + ); + + for (ItemStack item : contents) { + + if (item == null) { + + continue; + + } + + int amount = + item.getAmount(); + + ItemStack baseItem = + ItemStackUtils.createBaseItem( + item + ); + + Integer parentId = + InventoryLookupDAO.findInventoryId( + baseItem + ); + + if (parentId == null) { + + if (!allowUncategorizedItemCreation) { + + continue; + + } + + parentId = + InventoryCreationDAO.createParentInventoryItem( + baseItem, + ownerUuid, + ownerName + ); + + } + + if ( + item.hasItemMeta() + && item.getItemMeta() + instanceof Damageable damageable + && damageable.getDamage() > 0 + ) { + + if (!allowDamagedItemCreation) { + + continue; + + } + + DamagedVariantsDAO.createDamagedVariant( + parentId, + item + ); + + item.setAmount(0); + + processedStacks++; + processedItems += amount; + + continue; + + } + + if ( + item.hasItemMeta() + && item.getItemMeta().hasEnchants() + ) { + + EnchantedVariantsDAO.createEnchantedVariant( + parentId, + item + ); + + item.setAmount(0); + + processedStacks++; + processedItems += amount; + + continue; + + } + + if ( + ItemStackUtils.hasStoredContents( + item + ) + ) { + + PartiallyFilledVariantsDAO.createPartiallyFilledVariant( + parentId, + item + ); + + item.setAmount(0); + + processedStacks++; + processedItems += amount; + + continue; + + } + + ItemDAO.addItem( + ownerUuid, + ownerName, + baseItem, + item.getAmount(), + parentId + ); + + item.setAmount(0); + + processedStacks++; + processedItems += amount; + + } + + return new int[] { + processedStacks, + processedItems + }; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/deposit/WarehouseCloseListener.java b/src/main/java/com/rsscripting/rswarehouse/deposit/WarehouseCloseListener.java new file mode 100644 index 0000000..7842c8b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/deposit/WarehouseCloseListener.java @@ -0,0 +1,103 @@ +package com.rsscripting.rswarehouse.deposit; + +import com.rsscripting.rswarehouse.admin.admindao.PurgeVariantsDAO; +import com.rsscripting.rswarehouse.deposit.dao.VerifyIsChestDAO; +import com.rsscripting.rswarehouse.config.ConfigManager; +import com.rsscripting.rswarehouse.navigation.NavigationManager; +import org.bukkit.block.Chest; +import org.bukkit.block.DoubleChest; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.InventoryHolder; + +public class WarehouseCloseListener + implements Listener { + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + boolean chestCloseProcessingEnabled = + ConfigManager.get() + .getBoolean( + "chest-close-processing.enabled" + ); + + if (!chestCloseProcessingEnabled) { + + return; + + } + + Player player = + (Player) event.getPlayer(); + + InventoryHolder holder = + event.getInventory() + .getHolder(); + + Chest chest; + + if (holder instanceof Chest singleChest) { + + chest = singleChest; + + } else if (holder instanceof DoubleChest doubleChest) { + + Chest leftChest = + (Chest) doubleChest + .getLeftSide(); + + Chest rightChest = + (Chest) doubleChest + .getRightSide(); + + if ( + VerifyIsChestDAO.isWarehouseChest( + leftChest.getBlock() + ) + ) { + + chest = leftChest; + + } else { + + chest = rightChest; + + } + + } else if (holder instanceof DepositInventoryHolder) { + + WarehouseChestProcessor.processDepositInventory( + event.getInventory(), + player.getUniqueId().toString(), + player.getName() + ); + + return; + + } else { + + return; + + } + + if ( + !VerifyIsChestDAO.isWarehouseChest( + chest.getBlock() + ) + ) { + + return; + + } + WarehouseChestProcessor.processWarehouseChest( + chest + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/deposit/dao/ChestDAO.java b/src/main/java/com/rsscripting/rswarehouse/deposit/dao/ChestDAO.java new file mode 100644 index 0000000..b42da7a --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/deposit/dao/ChestDAO.java @@ -0,0 +1,207 @@ +package com.rsscripting.rswarehouse.deposit.dao; + +import com.rsscripting.rswarehouse.RSWarehouse; +import com.rsscripting.rswarehouse.database.DatabaseManager; +import org.bukkit.Bukkit; +import org.bukkit.block.Block; +import org.bukkit.block.Chest; +import org.bukkit.entity.Player; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class ChestDAO { + + public static String getOwnerUuid( + Block block + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT owner_uuid + FROM warehouse_chests + WHERE world = ? + AND x = ? + AND y = ? + AND z = ? + """ + ); + + statement.setString( + 1, + block.getWorld().getName() + ); + + statement.setInt( + 2, + block.getX() + ); + + statement.setInt( + 3, + block.getY() + ); + + statement.setInt( + 4, + block.getZ() + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return resultSet.getString( + "owner_uuid" + ); + + } + + } + + catch (Exception e) { + + RSWarehouse.getInstance() + .getLogger() + .severe( + "Failed getting warehouse owner UUID." + ); + + } + + return null; + + } + + public static String getOwnerName( + Block block + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT owner_name + FROM warehouse_chests + WHERE world = ? + AND x = ? + AND y = ? + AND z = ? + """ + ); + + statement.setString( + 1, + block.getWorld().getName() + ); + + statement.setInt( + 2, + block.getX() + ); + + statement.setInt( + 3, + block.getY() + ); + + statement.setInt( + 4, + block.getZ() + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return resultSet.getString( + "owner_name" + ); + + } + + } + + catch (Exception e) { + + RSWarehouse.getInstance() + .getLogger() + .severe( + "Failed getting warehouse owner name." + ); + + } + + return null; + + } + + public static Player getOnlineOwner( + Chest chest + ) { + + String ownerUuid = + getOwnerUuid( + chest.getBlock() + ); + + if (ownerUuid == null) { + + return null; + + } + + try { + + return Bukkit.getPlayer( + java.util.UUID.fromString( + ownerUuid + ) + ); + + } + + catch (IllegalArgumentException e) { + + return null; + + } + + } + + public static boolean isOwner( + Block block, + Player player + ) { + + String ownerUuid = + getOwnerUuid( + block + ); + + return ownerUuid != null + && + ownerUuid.equals( + player.getUniqueId().toString() + ); + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/deposit/dao/VerifyIsChestDAO.java b/src/main/java/com/rsscripting/rswarehouse/deposit/dao/VerifyIsChestDAO.java new file mode 100644 index 0000000..6caf6c2 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/deposit/dao/VerifyIsChestDAO.java @@ -0,0 +1,73 @@ +package com.rsscripting.rswarehouse.deposit.dao; + +import com.rsscripting.rswarehouse.RSWarehouse; +import com.rsscripting.rswarehouse.database.DatabaseManager; +import org.bukkit.block.Block; + +import java.sql.Connection; +import java.sql.PreparedStatement; + +public class VerifyIsChestDAO { + + public static boolean isWarehouseChest( + Block block + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT 1 + FROM warehouse_chests + WHERE world = ? + AND x = ? + AND y = ? + AND z = ? + """ + ); + + statement.setString( + 1, + block.getWorld().getName() + ); + + statement.setInt( + 2, + block.getX() + ); + + statement.setInt( + 3, + block.getY() + ); + + statement.setInt( + 4, + block.getZ() + ); + + return statement.executeQuery().next(); + + } + + catch (Exception e) { + + RSWarehouse.getInstance() + .getLogger() + .severe( + "Failed checking Community Warehouse chest registration." + ); + + } + + return false; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/deposit/dao/WarehouseChestDAO.java b/src/main/java/com/rsscripting/rswarehouse/deposit/dao/WarehouseChestDAO.java new file mode 100644 index 0000000..f292a7c --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/deposit/dao/WarehouseChestDAO.java @@ -0,0 +1,313 @@ +package com.rsscripting.rswarehouse.deposit.dao; + +import com.rsscripting.rswarehouse.RSWarehouse; +import com.rsscripting.rswarehouse.config.ConfigManager; +import com.rsscripting.rswarehouse.database.DatabaseManager; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.World; +import org.bukkit.block.Block; +import org.bukkit.block.Chest; +import org.bukkit.block.DoubleChest; +import org.bukkit.entity.Player; +import org.bukkit.inventory.InventoryHolder; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; + +import static com.rsscripting.rswarehouse.deposit.dao.VerifyIsChestDAO.isWarehouseChest; + +public class WarehouseChestDAO { + + public static void unregisterChest( + Block block + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE FROM warehouse_chests + WHERE world = ? + AND x = ? + AND y = ? + AND z = ? + """ + ); + + statement.setString( + 1, + block.getWorld().getName() + ); + + statement.setInt( + 2, + block.getX() + ); + + statement.setInt( + 3, + block.getY() + ); + + statement.setInt( + 4, + block.getZ() + ); + + statement.executeUpdate(); + + } + + catch (Exception e) { + + RSWarehouse.getInstance() + .getLogger() + .severe( + "Failed to unregister Community Warehouse chest." + ); + + } + + } + + public static void registerChest( + Block block, + Player player + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + INSERT INTO warehouse_chests ( + world, + x, + y, + z, + owner_uuid, + owner_name, + created_at + ) + VALUES (?, ?, ?, ?, ?, ?, ?) + """ + ); + + statement.setString( + 1, + block.getWorld().getName() + ); + + statement.setInt( + 2, + block.getX() + ); + + statement.setInt( + 3, + block.getY() + ); + + statement.setInt( + 4, + block.getZ() + ); + + statement.setString( + 5, + player.getUniqueId().toString() + ); + + statement.setString( + 6, + player.getName() + ); + + statement.setString( + 7, + String.valueOf( + System.currentTimeMillis() + ) + ); + + statement.executeUpdate(); + + if (block.getState() instanceof Chest chest) { + + chest.customName( + Component.text( + ConfigManager.get() + .getString( + "warehouse-chest-name", + "Community Warehouse" + ) + ) + ); + + chest.update(); + + } + + } + + catch (Exception e) { + + RSWarehouse.getInstance() + .getLogger() + .severe( + "Failed to register Community Warehouse chest." + ); + + } + + } + + public static Block getWarehouseChest( + Block block + ) { + + if (isWarehouseChest(block)) { + + return block; + + } + + if (!(block.getState() instanceof Chest chest)) { + + return null; + + } + + InventoryHolder holder = + chest.getInventory() + .getHolder(); + + if (!(holder instanceof DoubleChest doubleChest)) { + + return null; + + } + + if (doubleChest.getLeftSide() + instanceof Chest leftChest + && isWarehouseChest( + leftChest.getBlock() + )) { + + return leftChest.getBlock(); + + } + + if (doubleChest.getRightSide() + instanceof Chest rightChest + && isWarehouseChest( + rightChest.getBlock() + )) { + + return rightChest.getBlock(); + + } + + return null; + + } + + public static List getAllWarehouseChests() { + + List chests = + new ArrayList<>(); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT world, x, y, z + FROM warehouse_chests + """ + ); + + ResultSet resultSet = + statement.executeQuery(); + + while (resultSet.next()) { + + World world = + Bukkit.getWorld( + resultSet.getString( + "world" + ) + ); + + if (world == null) { + + continue; + + } + + int x = + resultSet.getInt( + "x" + ); + + int y = + resultSet.getInt( + "y" + ); + + int z = + resultSet.getInt( + "z" + ); + + Block block = + world.getBlockAt( + x, + y, + z + ); + + chests.add( + block + ); + + } + + } + + catch (Exception e) { + + RSWarehouse.getInstance() + .getLogger() + .severe( + "Failed loading warehouse chests." + ); + + } + + return chests; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/discovery/0 b/src/main/java/com/rsscripting/rswarehouse/discovery/0 new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/rsscripting/rswarehouse/discovery/discoverydao/DiscoveryDAO.java b/src/main/java/com/rsscripting/rswarehouse/discovery/discoverydao/DiscoveryDAO.java new file mode 100644 index 0000000..e959105 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/discovery/discoverydao/DiscoveryDAO.java @@ -0,0 +1,70 @@ +package com.rsscripting.rswarehouse.discovery.discoverydao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.time.LocalDate; + +public class DiscoveryDAO { + + public static void assignDiscovererIfNull( + int inventoryId, + String discovererUuid, + String discovererName + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + UPDATE warehouse_inventory + SET + discoverer_uuid = ?, + discoverer_name = ?, + discovered_date = ? + WHERE + id = ? + AND + discoverer_uuid IS NULL + """ + ); + + statement.setString( + 1, + discovererUuid + ); + + statement.setString( + 2, + discovererName + ); + + statement.setString( + 3, + LocalDate.now().toString() + ); + + statement.setInt( + 4, + inventoryId + ); + + int updated = + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/inventory/InventoryQuantityDAO.java b/src/main/java/com/rsscripting/rswarehouse/inventory/InventoryQuantityDAO.java new file mode 100644 index 0000000..309bbdd --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/inventory/InventoryQuantityDAO.java @@ -0,0 +1,177 @@ +package com.rsscripting.rswarehouse.inventory; + +import com.rsscripting.rswarehouse.database.DatabaseManager; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +public class InventoryQuantityDAO { + + public static void deleteInventory( + int inventoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE + FROM warehouse_inventory + WHERE id = ? + """ + ) + + ) { + + statement.setInt( + 1, + inventoryId + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static long getInventoryQuantity( + int inventoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT quantity + FROM warehouse_inventory + WHERE id = ? + """ + ); + + statement.setInt( + 1, + inventoryId + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return resultSet.getLong( + "quantity" + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return 0; + + } + + public static void updateInventoryQuantity( + int inventoryId, + long quantity + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + UPDATE warehouse_inventory + SET quantity = quantity + ? + WHERE id = ? + """ + ); + + statement.setLong( + 1, + quantity + ); + + statement.setInt( + 2, + inventoryId + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + + public static void removeInventoryQuantity( + int inventoryId, + long quantity + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + UPDATE warehouse_inventory + SET quantity = quantity - ? + WHERE id = ? + """ + ); + + statement.setLong( + 1, + quantity + ); + + statement.setInt( + 2, + inventoryId + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/inventory/inventorydao/InventoryCreationDAO.java b/src/main/java/com/rsscripting/rswarehouse/inventory/inventorydao/InventoryCreationDAO.java new file mode 100644 index 0000000..38dd4f2 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/inventory/inventorydao/InventoryCreationDAO.java @@ -0,0 +1,128 @@ +package com.rsscripting.rswarehouse.inventory.inventorydao; + +import com.rsscripting.rswarehouse.references.referencesdao.WarehouseReferenceDAO; +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.inventory.ItemStack; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.Statement; +import java.time.LocalDate; + +public class InventoryCreationDAO { + + public static Integer createParentInventoryItem( + ItemStack item, + String discovererUuid, + String discovererName + ) { + + int inventoryId = + createInventoryItem( + item, + 0, + discovererUuid, + discovererName + ); + + if (inventoryId == -1) { + + return -1; + + } + + WarehouseReferenceDAO.createWarehouseItemReference( + item, + inventoryId + ); + + return inventoryId; + + } + + public static int createInventoryItem( + ItemStack item, + long quantity, + String discovererUuid, + String discovererName + ) { + + String serializedItem = + ItemStackUtils.serialize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + INSERT INTO warehouse_inventory ( + serialized_item, + quantity, + discoverer_uuid, + discoverer_name, + discovered_date + ) + VALUES (?, ?, ?, ?, ?) + """, + Statement.RETURN_GENERATED_KEYS + ); + + statement.setString( + 1, + serializedItem + ); + + statement.setLong( + 2, + quantity + ); + + statement.setString( + 3, + discovererUuid + ); + + statement.setString( + 4, + discovererName + ); + + statement.setString( + 5, + LocalDate.now().toString() + ); + + statement.executeUpdate(); + + ResultSet resultSet = + statement.getGeneratedKeys(); + + if (resultSet.next()) { + + return resultSet.getInt( + 1 + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return -1; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/inventory/inventorydao/InventoryLookupDAO.java b/src/main/java/com/rsscripting/rswarehouse/inventory/inventorydao/InventoryLookupDAO.java new file mode 100644 index 0000000..163ebbf --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/inventory/inventorydao/InventoryLookupDAO.java @@ -0,0 +1,85 @@ +package com.rsscripting.rswarehouse.inventory.inventorydao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.inventory.ItemStack; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; + +public class InventoryLookupDAO { + + public static Integer findInventoryId( + ItemStack item + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT id, serialized_item + FROM warehouse_inventory + """ + ); + + ResultSet resultSet = + statement.executeQuery(); + + while (resultSet.next()) { + + ItemStack stored = + ItemStackUtils.deserialize( + resultSet.getString( + "serialized_item" + ) + ); + + if (stored == null) { + + continue; + + } + + stored = + ItemStackUtils.createBaseItem( + stored + ); + + stored = + ItemStackUtils.createBaseItem( + stored + ); + + ItemStack compare = + ItemStackUtils.createBaseItem( + item.clone() + ); + + if (stored.isSimilar(compare)) { + + return resultSet.getInt( + "id" + ); + + } + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return null; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/item/ItemsBuilder.java b/src/main/java/com/rsscripting/rswarehouse/item/ItemsBuilder.java new file mode 100644 index 0000000..1dd487d --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/ItemsBuilder.java @@ -0,0 +1,365 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.constants.RSKeys; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; + + +public class ItemsBuilder { + + public static void applyDiscoveryLore( + WarehouseItem warehouseItem, + List lore + ){ + + lore.add( + Component.empty() + ); + + String discoveredDate = null; + + if (warehouseItem.discoveredDate() != null) { + + discoveredDate = + LocalDate.parse( + warehouseItem.discoveredDate() + ).format( + DateTimeFormatter.ofPattern( + "MM-dd-yyyy" + ) + ); + + } + + String discovererName = + warehouseItem.discovererName(); + + if ( + + discoveredDate == null + && discovererName == null + + ) { + + lore.add( + Component.text( + "Currently Undiscovered" + ).color( + NamedTextColor.YELLOW + ) + ); + + } + + else if ( + + discoveredDate != null + && discovererName != null + + ) { + + lore.add( + Component.text( + "Discovered on " + + discoveredDate + + " by " + + discovererName + ).color( + NamedTextColor.GRAY + ) + ); + + } + + else if ( + + discoveredDate != null + + ) { + + lore.add( + Component.text( + "Discovered on " + + discoveredDate + ).color( + NamedTextColor.GRAY + ) + ); + + } + + else { + + lore.add( + Component.text( + "Discovered by " + + discovererName + ).color( + NamedTextColor.GRAY + ) + ); + + } + + } + + public static void applyStockLore( + WarehouseItem warehouseItem, + List lore + ) { + + lore.add( + Component.text( + "In Stock: " + + String.format( + "%,d", + warehouseItem.quantity() + ) + ) + ); + + } + + public static void applySubCategoryLore( + WarehouseItem warehouseItem, + List lore + ) { + + lore.add( + Component.text( + "Click to open subcategory" + ).color( + NamedTextColor.GOLD + ) + ); + + String displayLore = null; + + if ( + warehouseItem.subcategoryId() != null + ) { + + WarehouseCategory subCategory = + CategoryDAO.getCategoryById( + warehouseItem.subcategoryId() + ); + + if (subCategory != null) { + + displayLore = + subCategory.lore(); + + } + + } + else { + + displayLore = + warehouseItem.defaultLore(); + + } + + if ( + displayLore != null + && + !displayLore.isBlank() + ) { + + lore.add( + Component.empty() + ); + + for ( + String line : + displayLore.split( + "\n", + -1 + ) + ) { + + if ( + line.isBlank() + ) { + + continue; + + } + + lore.add( + Component.text( + line + ).color( + NamedTextColor.GRAY + ) + ); + + } + + } + + } + + public static List createLore( + ItemMeta meta, + boolean isSubCategory + ) { + + List lore = + new ArrayList<>(); + + if (!isSubCategory) { + + List existingLore = + meta.lore(); + + if (existingLore != null) { + + lore.addAll( + existingLore + ); + + } + + } + + if (!lore.isEmpty()) { + + lore.add( + Component.empty() + ); + + } + + return lore; + + } + + public static void applyDisplayName( + WarehouseItem warehouseItem, + ItemMeta meta + ){ + + boolean isSubCategory = + warehouseItem.subcategoryId() != null; + + if (isSubCategory) { + + WarehouseCategory subCategory = + CategoryDAO.getCategoryById( + warehouseItem.subcategoryId() + ); + + if (subCategory != null) { + + meta.displayName( + Component.text( + subCategory.displayName() + ).color( + NamedTextColor.WHITE + ) + ); + + } + + } + + } + + public static ItemStack buildDisplayItem( + WarehouseItem warehouseItem + ) { + + ItemStack item = + ItemStackUtils.deserialize( + warehouseItem.serializedItem() + ); + + boolean isSubCategory = + warehouseItem.subcategoryId() != null; + + if (isSubCategory) { + + item = + ItemStackUtils.createNavigationItem( + item + ); + + } + + if (item == null) { + + Bukkit.getLogger().info( + "Deserialize Failed" + ); + + return null; + + } + + return item; + + } + + public static void applyOperatorLore( + Player player, + WarehouseItem warehouseItem, + List lore + ) { + + if (!player.isOp()) { + + return; + + } + + lore.add( + Component.empty() + ); + + lore.add( + Component.text( + "Item ID: " + + warehouseItem.id() + ).color( + NamedTextColor.DARK_GRAY + ) + ); + + lore.add( + Component.text( + "Shift + Right Click for Item Options" + ).color( + NamedTextColor.GRAY + ) + ); + + } + + public static void applyPersistentData( + ItemMeta meta, + WarehouseItem warehouseItem + ) { + + meta.getPersistentDataContainer().set( + RSKeys.ITEM_ID, + PersistentDataType.INTEGER, + warehouseItem.id() + ); + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenu.java b/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenu.java new file mode 100644 index 0000000..b57489f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenu.java @@ -0,0 +1,354 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.RSWarehouse; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.meta.MapMeta; +import org.bukkit.map.MapView; + +import java.util.List; + +public class ItemsMenu { + + public static final String MENU_TITLE = "Items"; + + public static void open( + Player player, + int categoryId, + String categoryName, + int page + ){ + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + session.setItemsCategoryId( + categoryId + ); + + session.setItemsCategoryName( + categoryName + ); + + session.setItemsPage( + page + ); + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "ITEMS" + ), + 54, + Component.text( + categoryName + + " (Page " + + (page + 1) + + ")" + ).color( + NamedTextColor.BLUE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int slot = 0; slot <= 8; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§a Back" + ) + ); + + List items = + ItemsPagination.getItemsForDisplay( + categoryId, + page + ); + + int maxPage = + ItemsPagination.getMaximumPage( + categoryId + ); + + page = + Math.max( + 0, + Math.min( + page, + maxPage + ) + ); + + session.setItemsPage( + page + ); + + boolean hasPrevious = + page > 0; + + boolean hasNext = + page < maxPage; + int slot = 9; + + /* + * Find the highest assigned slot on this page. + * Automatic items begin immediately after it. + */ + for (WarehouseItem warehouseItem : items) { + + if ( + warehouseItem.page() != null + && + warehouseItem.slot() != null + && + warehouseItem.page() == (page + 1) + && + warehouseItem.slot() >= 9 + ) { + + slot = Math.max( + slot, + warehouseItem.slot() + 1 + ); + + } + + } + + for (WarehouseItem warehouseItem : items) { + + ItemStack item = + ItemsBuilder.buildDisplayItem( + warehouseItem + ); + + if (item == null) { + + continue; + + } + + boolean isSubCategory = + warehouseItem.subcategoryId() != null; + + ItemMeta meta = + item.getItemMeta(); + + + if (meta == null) { + + continue; + + } + + ItemsBuilder.applyDisplayName( + warehouseItem, + meta + ); + + List lore = + ItemsBuilder.createLore( + meta, + isSubCategory + ); + + if (isSubCategory) { + + ItemsBuilder.applySubCategoryLore( + warehouseItem, + lore + ); + + } + else { + + ItemsBuilder.applyStockLore( + warehouseItem, + lore + ); + + } + + if ( + + !isSubCategory + + && + + RSWarehouse.getInstance() + .getConfig() + .getBoolean( + "display.show-discovery-information", + true + ) + + ) { + + ItemsBuilder.applyDiscoveryLore( + warehouseItem, + lore + ); + + } + + ItemsBuilder.applyOperatorLore( + player, + warehouseItem, + lore + ); + + lore.addAll( + ItemStackUtils.getSpecialItemLore(item) + ); + + meta.lore( + lore + ); + + ItemsBuilder.applyPersistentData( + meta, + warehouseItem + ); + + item.setItemMeta( + meta + ); + + int displaySlot; + + if ( + warehouseItem.page() != null + && + warehouseItem.slot() != null + && + warehouseItem.page() > 0 + && + warehouseItem.slot() > 0 + ){ + + displaySlot = + warehouseItem.slot(); + + } + else { + + displaySlot = + slot++; + + } + + menu.setItem( + displaySlot, + item + ); + + } + + if (hasPrevious) { + + menu.setItem( + 0, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aPrevious Page" + ) + ); + + } + + if (hasNext) { + + menu.setItem( + 8, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aNext Page" + ) + ); + + } + + for (WarehouseItem warehouseItem : items) { + + ItemStack item = + ItemStackUtils.deserialize( + warehouseItem.serializedItem() + ); + + if ( + item == null + || + item.getType() + != Material.FILLED_MAP + ) { + + continue; + + } + + if ( + !(item.getItemMeta() + instanceof MapMeta mapMeta) + ) { + + continue; + + } + + if ( + !mapMeta.hasMapView() + ) { + + continue; + + } + + MapView mapView = + mapMeta.getMapView(); + + if ( + mapView == null + ) { + + continue; + + } + + player.sendMap( + mapView + ); + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenuListener.java new file mode 100644 index 0000000..c21c9af --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/ItemsMenuListener.java @@ -0,0 +1,177 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.item.options.ItemOptionsMenu; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.navigation.NavigationManager; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.event.inventory.InventoryClickEvent; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.session.TransactionSession; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.constants.RSKeys; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +public class ItemsMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + Player player = + (Player) event.getWhoClicked(); + + if ( + event.getView() + .getTopInventory() + .getHolder() + instanceof RSMenuHolder holder + && holder.getMenuId().equals( + "ITEMS" + ) + ) { + + event.setCancelled( + true + ); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + if (event.getSlot() == 0) { + + if (session.getItemsPage() > 0) { + + ItemsMenu.open( + player, + session.getItemsCategoryId(), + session.getItemsCategoryName(), + session.getItemsPage() - 1 + ); + + } + + return; + + } + + if (event.getSlot() == 8) { + + ItemsMenu.open( + player, + session.getItemsCategoryId(), + session.getItemsCategoryName(), + session.getItemsPage() + 1 + ); + + return; + + } + + if (event.getSlot() == 4) { + + NavigationManager.back(player); + + return; + + } + + if (event.getCurrentItem() == null) { + + return; + + } + + ItemMeta meta = + event.getCurrentItem() + .getItemMeta(); + + if (meta == null) { + + return; + + } + + Integer itemId = + meta.getPersistentDataContainer() + .get( + RSKeys.ITEM_ID, + PersistentDataType.INTEGER + ); + + if (itemId == null) { + + return; + + } + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + itemId + ); + + if ( + event.getClick() == ClickType.SHIFT_RIGHT + && player.isOp() + ) { + + ItemOptionsMenu.open( + player, + itemId + ); + + return; + + } + + if ( + + warehouseItem.subcategoryId() + != null + + ) { + + WarehouseCategory subCategory = + CategoryDAO.getCategoryById( + warehouseItem.subcategoryId() + ); + + NavigationManager.openItems( + player, + subCategory.id(), + subCategory.displayName(), + 0); + + return; + + } + + session.setItemActionSession( + new TransactionSession( + itemId + ) + ); + + TransactionAmountMenu.open( + player, + itemId, + 0 + ); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/ItemsPagination.java b/src/main/java/com/rsscripting/rswarehouse/item/ItemsPagination.java new file mode 100644 index 0000000..06d0465 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/ItemsPagination.java @@ -0,0 +1,308 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.model.WarehouseItem; + +import java.util.ArrayList; +import java.util.List; + +public class ItemsPagination { + + public static int getMaximumPage( + int categoryId + ) { + + List items = + ItemDAO.getItemsForCategory( + categoryId + ); + + int highestAssignedPage = -1; + int unassigned = 0; + + for (WarehouseItem item : items) { + + if ( + item.page() != null + && + item.slot() != null + && + item.page() > 0 + && + item.slot() > 0 + ) { + + highestAssignedPage = + Math.max( + highestAssignedPage, + item.page() - 1 + ); + + } else { + + unassigned++; + + } + + } + + int consumed = 0; + + for (int assignedPage = 0; + assignedPage <= highestAssignedPage; + assignedPage++) { + + int highestSlot = 8; + + for (WarehouseItem item : items) { + + if ( + item.page() != null + && + item.slot() != null + && + item.page() == assignedPage + 1 + ) { + + highestSlot = + Math.max( + highestSlot, + item.slot() + ); + + } + + } + + consumed += + Math.max( + 0, + 53 - highestSlot + ); + + } + + consumed = + Math.min( + consumed, + unassigned + ); + + unassigned -= consumed; + + int overflowPages = + (unassigned + 44) / 45; + + return Math.max( + 0, + highestAssignedPage + overflowPages + ); + + } + + public static List getItemsForDisplay( + int categoryId, + int page + ) { + + List allItems = + ItemDAO.getItemsForCategory( + categoryId + ); + + List assigned = + new ArrayList<>(); + + List unassigned = + new ArrayList<>(); + + int highestAssignedPage = -1; + + for (WarehouseItem item : allItems) { + + if ( + item.page() != null + && + item.slot() != null + && + item.page() > 0 + && + item.slot() > 0 + ) { + + assigned.add(item); + + highestAssignedPage = + Math.max( + highestAssignedPage, + item.page() - 1 + ); + + } + + else { + + unassigned.add(item); + + } + + } + + /* + * Assigned pages + */ + if (page <= highestAssignedPage) { + + List results = + new ArrayList<>(); + + int highestSlot = 8; + + for (WarehouseItem item : assigned) { + + if (item.page() == (page + 1)) { + + results.add(item); + + highestSlot = + Math.max( + highestSlot, + item.slot() + ); + + } + + } + + /* + * Figure out how many unassigned items have + * already been consumed by previous assigned pages. + */ + int consumed = 0; + + for (int previousPage = 0; + previousPage < page; + previousPage++) { + + int previousHighestSlot = 8; + + for (WarehouseItem item : assigned) { + + if (item.page() == (previousPage + 1)) { + + previousHighestSlot = + Math.max( + previousHighestSlot, + item.slot() + ); + + } + + } + + consumed += + Math.max( + 0, + 53 - previousHighestSlot + ); + + } + + int remainingSlots = + Math.max( + 0, + 53 - highestSlot + ); + + while ( + remainingSlots > 0 + && + consumed < unassigned.size() + ) { + + results.add( + unassigned.get( + consumed + ) + ); + + consumed++; + remainingSlots--; + + } + + return results; + + } + + int consumed = 0; + + for (int assignedPage = 0; + assignedPage <= highestAssignedPage; + assignedPage++) { + + int highestSlot = 8; + + for (WarehouseItem item : assigned) { + + if (item.page() == assignedPage + 1) { + + highestSlot = + Math.max( + highestSlot, + item.slot() + ); + + } + + } + + consumed += + Math.max( + 0, + 53 - highestSlot + ); + + } + + consumed = + Math.min( + consumed, + unassigned.size() + ); + + /* + * Overflow pages + */ + + int overflowPage = + page + - highestAssignedPage + - 1; + + int start = + consumed + + (overflowPage * 45); + + if (start >= unassigned.size()) { + + return new ArrayList<>(); + + } + + int end = + Math.min( + start + 45, + unassigned.size() + ); + + return new ArrayList<>( + unassigned.subList( + start, + end + ) + ); + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountButtonHandler.java b/src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountButtonHandler.java new file mode 100644 index 0000000..c286426 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountButtonHandler.java @@ -0,0 +1,58 @@ +package com.rsscripting.rswarehouse.item; + +public class TransactionAmountButtonHandler { + + public static Integer handle( + int slot, + int amount, + long playerHas, + long maxWithdraw + ) { + + switch (slot) { + + case 9 -> + amount -= 64; + + case 10 -> + amount -= 16; + + case 11 -> + amount -= 1; + + case 15 -> + amount += 1; + + case 16 -> + amount += 16; + + case 17 -> + amount += 64; + + default -> { + + return null; + + } + + } + + if (amount > playerHas) { + + amount = + (int) playerHas; + + } + + if (amount < -maxWithdraw) { + + amount = + (int) -maxWithdraw; + + } + + return amount; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountMenu.java b/src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountMenu.java new file mode 100644 index 0000000..7c156de --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountMenu.java @@ -0,0 +1,225 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class TransactionAmountMenu { + + public static void open( + Player player, + int itemId, + int amount + ) { + + String title; + + if (amount > 0) { + + title = + "Deposit: " + + String.format( + "%,d", + amount + ); + + } else if (amount < 0) { + + title = + "Withdraw: " + + String.format( + "%,d", + Math.abs( + amount + ) + ); + + } else { + + title = + "Amount: 0"; + + } + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "ITEM_ACTION" + ), + 27, + Component.text( + title + ).color( + NamedTextColor.BLUE + ) + ); + + /* + |-------------------------------------------------------------------------- + | FILLER + |-------------------------------------------------------------------------- + */ + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem( + i, + RSMenuUtils.createFillerPane() + ); + + } + +/* +|-------------------------------------------------------------------------- +| CENTER ITEM +|-------------------------------------------------------------------------- +*/ + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + itemId + ); + + TransactionCenterItemBuilder.addCenterItem( + menu, + player, + warehouseItem + ); + + /* + |-------------------------------------------------------------------------- + | WITHDRAW + |-------------------------------------------------------------------------- + */ + + ItemStack subtract64 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 64" + ); + + subtract64.setAmount( + 64 + ); + + menu.setItem( + 9, + subtract64 + ); + + ItemStack subtract16 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 16" + ); + + subtract16.setAmount( + 16 + ); + + menu.setItem( + 10, + subtract16 + ); + + + ItemStack subtract1 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 1" + ); + + subtract1.setAmount( + 1 + ); + + menu.setItem( + 11, + subtract1 + ); + + /* + |-------------------------------------------------------------------------- + | DEPOSIT + |-------------------------------------------------------------------------- + */ + + ItemStack add1 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 1" + ); + + add1.setAmount( + 1 + ); + + menu.setItem( + 15, + add1 + ); + + ItemStack add16 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 16" + ); + + add16.setAmount( + 16 + ); + + menu.setItem( + 16, + add16 + ); + + ItemStack add64 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 64" + ); + + add64.setAmount( + 64 + ); + + menu.setItem( + 17, + add64 + ); + + TransactionVariantBuilder.addVariantButtons( + menu, + warehouseItem + ); + + /* + |-------------------------------------------------------------------------- + | BACK + |-------------------------------------------------------------------------- + */ + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§eBack" + ) + ); + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountMenuListener.java new file mode 100644 index 0000000..589b529 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/TransactionAmountMenuListener.java @@ -0,0 +1,216 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.session.TransactionSession; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class TransactionAmountMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if ( + !(event.getWhoClicked() + instanceof Player player) + ) { + + return; + + } + + if ( + !(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder) + ) { + + return; + + } + + if ( + !holder.getMenuId() + .equals( + "ITEM_ACTION" + ) + ) { + + return; + + } + + event.setCancelled( + true + ); + + + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + TransactionSession itemSession = + session.getItemActionSession(); + + if (itemSession == null) { + + return; + + } + + int amount = + itemSession.getAmount(); + + int itemId = + itemSession.getWarehouseItemId(); + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + itemId + ); + + if (warehouseItem == null) { + + return; + + } + + if ( + TransactionVariantHandler.handle( + player, + event.getSlot(), + event.getCurrentItem(), + warehouseItem + ) + ) { + + return; + + } + + if (event.getSlot() == 4) { + + ItemsMenu.open( + player, + session.getItemsCategoryId(), + session.getItemsCategoryName(), + session.getItemsPage()); + + + return; + } + + ItemStack item = + ItemStackUtils.deserialize( + warehouseItem.serializedItem() + ); + + if (item == null) { + + return; + + } + + long playerHas = + TransactionUtils.getPlayerItemCount( + player, + item + ); + + if (event.getSlot() == 13) { + + if ( + TransactionConfirmHandler.handle( + player, + itemSession, + item, + amount + ) + ) { + + return; + + } + + if (amount == 0) { + + return; + + } + + if ( + TransactionWithdrawHandler.handle( + player, + itemSession, + item, + amount + ) + ) { + + return; + + } + + return; + + } + + long warehouseStock = + warehouseItem.quantity(); + + int inventoryCapacity = + TransactionUtils.getAvailableCapacity( + player, + item + ); + + long maxWithdraw = + Math.min( + warehouseStock, + inventoryCapacity + ); + + Integer newAmount = + TransactionAmountButtonHandler.handle( + event.getSlot(), + amount, + playerHas, + maxWithdraw + ); + + if (newAmount == null) { + + return; + + } + + amount = + newAmount; + + itemSession.setAmount( + amount + ); + + TransactionAmountMenu.open( + player, + itemSession.getWarehouseItemId(), + amount + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/TransactionCenterItemBuilder.java b/src/main/java/com/rsscripting/rswarehouse/item/TransactionCenterItemBuilder.java new file mode 100644 index 0000000..9ef1394 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/TransactionCenterItemBuilder.java @@ -0,0 +1,96 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; + +public class TransactionCenterItemBuilder { + + public static void addCenterItem( + Inventory menu, + Player player, + WarehouseItem warehouseItem + ){ + + if (warehouseItem != null) { + + ItemStack item = + ItemStackUtils.deserialize( + warehouseItem.serializedItem() + ); + + if (item != null) { + + ItemMeta meta = + item.getItemMeta(); + + if (meta != null) { + + long playerHas = + TransactionUtils.getPlayerItemCount( + player, + item + ); + + meta.lore( + List.of( + Component.text( + "In Stock: " + + String.format( + "%,d", + warehouseItem.quantity() + ) + ).color( + NamedTextColor.LIGHT_PURPLE + ), + + Component.text( + "Player Has: " + + String.format( + "%,d", + playerHas + ) + ).color( + NamedTextColor.GREEN + ), + + Component.text( + " " + ).color( + NamedTextColor.YELLOW + ), + + Component.text( + "Click to complete transaction." + ).color( + NamedTextColor.YELLOW + ) + + ) + ); + + item.setItemMeta( + meta + ); + + } + + menu.setItem( + 13, + item + ); + + } + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/item/TransactionConfirmHandler.java b/src/main/java/com/rsscripting/rswarehouse/item/TransactionConfirmHandler.java new file mode 100644 index 0000000..9348538 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/TransactionConfirmHandler.java @@ -0,0 +1,74 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.session.TransactionSession; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; + +public class TransactionConfirmHandler { + + public static boolean handle( + Player player, + TransactionSession itemSession, + ItemStack item, + int amount + ) { + + if (amount == 0) { + + return false; + + } + + if (amount > 0) { + + ItemStack depositItem = + item.clone(); + + depositItem.setAmount( + 1 + ); + + if ( + TransactionUtils.removeItems( + player, + depositItem, + amount + ) + ) { + + ItemDAO.addItem( + player.getUniqueId() + .toString(), + player.getName(), + depositItem, + amount + ); + + player.sendMessage( + "§aYou have deposited " + + amount + + " items." + ); + + itemSession.setAmount( + 0 + ); + + TransactionAmountMenu.open( + player, + itemSession.getWarehouseItemId(), + 0 + ); + + } + + return true; + + } + + return false; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/TransactionUtils.java b/src/main/java/com/rsscripting/rswarehouse/item/TransactionUtils.java new file mode 100644 index 0000000..ee2338b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/TransactionUtils.java @@ -0,0 +1,152 @@ +package com.rsscripting.rswarehouse.item; + +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class TransactionUtils { + + public static long getPlayerItemCount( + Player player, + ItemStack target + ) { + + long count = 0; + + for (ItemStack item : player.getInventory().getContents()) { + + if (item == null) { + continue; + } + + if ( + item.isSimilar( + target + ) + ) { + + count += item.getAmount(); + + } + + + } + + return count; + + } + + public static int getAvailableCapacity( + Player player, + ItemStack target + ) { + + int capacity = 0; + + int maxStack = + target.getMaxStackSize(); + + for ( + ItemStack item : + player.getInventory() + .getStorageContents() + ) { + + if (item == null) { + + capacity += maxStack; + + continue; + + } + + if ( + item.isSimilar( + target + ) + ) { + + capacity += + maxStack + - item.getAmount(); + + } + + } + + return capacity; + + } + + public static boolean removeItems( + Player player, + ItemStack target, + int amount + ){ + + int remaining = + amount; + + ItemStack[] contents = + player.getInventory() + .getContents(); + + for (int slot = 0; + slot < contents.length; + slot++) { + + ItemStack item = + contents[slot]; + + if (item == null) { + + continue; + + } + + if (!item.isSimilar(target)) { + + continue; + + } + + if ( + item.getAmount() + <= remaining + ) { + + remaining -= + item.getAmount(); + + player.getInventory() + .setItem( + slot, + null + ); + + } + + else { + + item.setAmount( + item.getAmount() + - remaining + ); + + remaining = + 0; + + } + + if (remaining <= 0) { + + return true; + + } + + } + + return false; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/item/TransactionVariantBuilder.java b/src/main/java/com/rsscripting/rswarehouse/item/TransactionVariantBuilder.java new file mode 100644 index 0000000..a437ebc --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/TransactionVariantBuilder.java @@ -0,0 +1,232 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.variants.dao.DamagedVariantsDAO; +import com.rsscripting.rswarehouse.variants.dao.EnchantedVariantsDAO; +import com.rsscripting.rswarehouse.variants.dao.PartiallyFilledVariantsDAO; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import org.bukkit.Material; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.persistence.PersistentDataType; + +public class TransactionVariantBuilder { + + public static void addVariantButtons( + Inventory menu, + WarehouseItem warehouseItem + ) { + + /* + | Enchanted Variants Button + */ + + if ( + warehouseItem != null + && warehouseItem.inventoryId() != null + ) { + + if ( + EnchantedVariantsDAO.hasEnchantedVariants( + warehouseItem.inventoryId() + ) + ) { + + ItemStack enchantedIcon = + ItemStackUtils.deserialize( + warehouseItem.serializedItem() + ); + + if (enchantedIcon != null) { + + ItemMeta meta = + enchantedIcon.getItemMeta(); + + if (meta != null) { + + meta.addEnchant( + Enchantment.UNBREAKING, + 1, + true + ); + + meta.addItemFlags( + ItemFlag.HIDE_ENCHANTS + ); + + enchantedIcon.setItemMeta( + meta + ); + + } + + ItemStack menuIcon = + RSMenuUtils.createMenuItem( + enchantedIcon, + "§eView Enchanted Variants" + ); + + ItemMeta menuMeta = + menuIcon.getItemMeta(); + + menuMeta.getPersistentDataContainer().set( + RSKeys.ENCHANTED_VARIANT_ID, + PersistentDataType.INTEGER, + warehouseItem.inventoryId() + ); + + if (menuMeta != null) { + + menuMeta.addItemFlags( + ItemFlag.HIDE_ATTRIBUTES + ); + + menuIcon.setItemMeta( + menuMeta + ); + + } + + menu.setItem( + 1, + menuIcon + ); + + } + + } + else if ( + PartiallyFilledVariantsDAO.hasPartiallyFilledVariants( + warehouseItem.inventoryId() + ) + ) { + + ItemStack partiallyFilledIcon = + ItemStackUtils.deserialize( + warehouseItem.serializedItem() + ); + + if (partiallyFilledIcon != null) { + + ItemStack menuIcon = + RSMenuUtils.createMenuItem( + partiallyFilledIcon, + "§eView Partially Filled Variants" + ); + + ItemMeta menuMeta = + menuIcon.getItemMeta(); + + menuMeta.getPersistentDataContainer().set( + RSKeys.PARTIALLY_FILLED_VARIANT_ID, + PersistentDataType.INTEGER, + warehouseItem.inventoryId() + ); + + if (menuMeta != null) { + + menuMeta.addItemFlags( + ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_ADDITIONAL_TOOLTIP + ); + + menuIcon.setItemMeta( + menuMeta + ); + + } + + menu.setItem( + 2, + menuIcon + ); + + } + + } + + } + + +/* +|-------------------------------------------------------------------------- +| VARIANTS +|-------------------------------------------------------------------------- +*/ + + if ( + warehouseItem != null + && warehouseItem.inventoryId() != null + && DamagedVariantsDAO.hasDamagedVariants( + warehouseItem.inventoryId() + ) + ) { + + ItemStack damagedIcon = + ItemStackUtils.deserialize( + warehouseItem.serializedItem() + ); + + if (damagedIcon == null) { + + damagedIcon = new ItemStack(Material.ANVIL); + + } + + if (damagedIcon.getItemMeta() instanceof Damageable damageable) { + + int maxDurability = damagedIcon.getType().getMaxDurability(); + + damageable.setDamage(maxDurability / 2); + + damagedIcon.setItemMeta(damageable); + + } else { + + damagedIcon = new ItemStack(Material.ANVIL); + + } + + ItemStack menuIcon = + RSMenuUtils.createMenuItem( + damagedIcon, + "§eView Damaged Variants" + ); + + ItemMeta menuMeta = + menuIcon.getItemMeta(); + + if (menuMeta != null) { + + menuMeta.addItemFlags( + ItemFlag.HIDE_ATTRIBUTES + ); + + menuMeta.getPersistentDataContainer().set( + RSKeys.DAMAGED_VARIANT_ID, + PersistentDataType.INTEGER, + warehouseItem.inventoryId() + ); + + menuIcon.setItemMeta( + menuMeta + ); + + } + + menu.setItem( + 0, + menuIcon + ); + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/item/TransactionVariantHandler.java b/src/main/java/com/rsscripting/rswarehouse/item/TransactionVariantHandler.java new file mode 100644 index 0000000..bcef78c --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/TransactionVariantHandler.java @@ -0,0 +1,110 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.variantsdamaged.DamagedVariantsMenu; +import com.rsscripting.rswarehouse.variantsenchanted.EnchantedVariantsMenu; +import com.rsscripting.rswarehouse.variantspartiallyfilled.PartiallyFilledVariantsMenu; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.persistence.PersistentDataContainer; +import org.bukkit.persistence.PersistentDataType; + +public class TransactionVariantHandler { + + public static boolean handle( + Player player, + int slot, + ItemStack clicked, + WarehouseItem warehouseItem + ) { + + if ( + clicked == null + || !clicked.hasItemMeta() + ) { + + return false; + + } + + PersistentDataContainer pdc = + clicked.getItemMeta() + .getPersistentDataContainer(); + + if (slot == 0) { + + if ( + !pdc.has( + RSKeys.DAMAGED_VARIANT_ID, + PersistentDataType.INTEGER + ) + ) { + + return false; + + } + + DamagedVariantsMenu.open( + player, + warehouseItem.id(), + warehouseItem.inventoryId() + ); + + return true; + + } + + if (slot == 1) { + + if ( + !pdc.has( + RSKeys.ENCHANTED_VARIANT_ID, + PersistentDataType.INTEGER + ) + ) { + + return false; + + } + + EnchantedVariantsMenu.open( + player, + warehouseItem.id(), + warehouseItem.inventoryId() + ); + + return true; + + } + + if (slot == 2) { + + if ( + !pdc.has( + RSKeys.PARTIALLY_FILLED_VARIANT_ID, + PersistentDataType.INTEGER + ) + ) { + + return false; + + } + + PartiallyFilledVariantsMenu.open( + player, + warehouseItem.id(), + warehouseItem.inventoryId() + ); + + return true; + + } + + return false; + + } + + + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/TransactionWithdrawHandler.java b/src/main/java/com/rsscripting/rswarehouse/item/TransactionWithdrawHandler.java new file mode 100644 index 0000000..3c64135 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/TransactionWithdrawHandler.java @@ -0,0 +1,83 @@ +package com.rsscripting.rswarehouse.item; + +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import com.rsscripting.rswarehouse.autodeposit.autodepositdao.AutoDepositDAO; +import com.rsscripting.rswarehouse.session.TransactionSession; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; + +public class TransactionWithdrawHandler { + + public static boolean handle( + Player player, + TransactionSession itemSession, + ItemStack item, + int amount + ) { + + if (amount >= 0) { + + return false; + + } + + int withdrawAmount = + Math.abs( + amount + ); + + ItemStack withdrawItem = + item.clone(); + + withdrawItem.setAmount( + withdrawAmount + ); + + if ( + AutoDepositDAO.shouldBlockWithdrawal( + player.getUniqueId(), + withdrawItem + ) + ) { + + RSMessageUtils.error( + player, + "Disable Auto Deposit or remove this item from your filter before withdrawing it." + ); + + return true; + + } + + player.getInventory() + .addItem( + withdrawItem + ); + + ItemDAO.removeItem( + withdrawItem, + withdrawAmount + ); + + player.sendMessage( + "§aYou have withdrawn " + + withdrawAmount + + " items." + ); + + itemSession.setAmount( + 0 + ); + + TransactionAmountMenu.open( + player, + itemSession.getWarehouseItemId(), + 0 + ); + + return true; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenu.java b/src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenu.java new file mode 100644 index 0000000..9c148a5 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenu.java @@ -0,0 +1,98 @@ +package com.rsscripting.rswarehouse.item.deleteitem; + +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class DeleteConfirmationMenu { + + public static void open( + Player player, + int itemId + ) { + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + itemId + ); + + if (warehouseItem == null) { + + player.sendMessage( + "§cUnable to locate warehouse item." + ); + + return; + + } + + Inventory menu = + Bukkit.createInventory( + new DeleteConfirmationMenuHolder( + itemId + ), + 27, + Component.text( + "Delete Item?" + ).color( + NamedTextColor.RED + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int i = 0; i < 27; i++) { + + menu.setItem( + i, + filler + ); + + } + + menu.setItem( + 11, + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cCancel" + ) + ); + + menu.setItem( + 15, + RSMenuUtils.createMenuItem( + Material.LIME_WOOL, + "§aDelete" + ) + ); + + ItemStack displayItem = + ItemStackUtils.deserialize( + warehouseItem.serializedItem() + ); + + if (displayItem != null) { + + menu.setItem( + 13, + displayItem + ); + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenuHolder.java b/src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenuHolder.java new file mode 100644 index 0000000..fe745fa --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenuHolder.java @@ -0,0 +1,29 @@ +package com.rsscripting.rswarehouse.item.deleteitem; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; + +public class DeleteConfirmationMenuHolder + extends RSMenuHolder { + + private final int itemId; + + public DeleteConfirmationMenuHolder( + int itemId + ) { + + super( + "DELETE_CONFIRMATION" + ); + + this.itemId = + itemId; + + } + + public int getItemId() { + + return itemId; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenuListener.java new file mode 100644 index 0000000..b473653 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/deleteitem/DeleteConfirmationMenuListener.java @@ -0,0 +1,173 @@ +package com.rsscripting.rswarehouse.item.deleteitem; + +import com.rsscripting.rswarehouse.item.options.ItemOptionsMenu; +import com.rsscripting.rswarehouse.inventory.InventoryQuantityDAO; +import com.rsscripting.rswarehouse.references.referencesdao.WarehouseReferenceDAO; +import com.rsscripting.rswarehouse.variants.dao.DamagedVariantsDAO; +import com.rsscripting.rswarehouse.variants.dao.EnchantedVariantsDAO; +import com.rsscripting.rswarehouse.variants.dao.PartiallyFilledVariantsDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class DeleteConfirmationMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getWhoClicked() + instanceof Player player)) { + + return; + + } + + if (!(event.getInventory().getHolder() + instanceof DeleteConfirmationMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "DELETE_CONFIRMATION" + )) { + + return; + + } + + event.setCancelled( + true + ); + + if (event.getCurrentItem() == null) { + + return; + + } + + Material material = + event.getCurrentItem().getType(); + + if (material == Material.RED_WOOL) { + + ItemOptionsMenu.open( + player, + holder.getItemId() + ); + + return; + + } + + if (material == Material.LIME_WOOL) { + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + holder.getItemId() + ); + + if (warehouseItem == null) { + + player.sendMessage( + "§cUnable to locate warehouse item." + ); + + return; + + } + + if (warehouseItem.inventoryId() == null) { + + player.sendMessage( + "§cCannot delete subcategories yet." + ); + + return; + + } + + int references = + WarehouseReferenceDAO.countInventoryReferences( + warehouseItem.inventoryId() + ); + + if (references > 1) { + + WarehouseReferenceDAO.deleteItemReference( + warehouseItem.id() + ); + + player.sendMessage( + "§aItem reference deleted." + ); + + player.closeInventory(); + + return; + + } + + if (DamagedVariantsDAO.hasDamagedVariants( + warehouseItem.inventoryId() + )) { + + player.sendMessage( + "§cCannot delete. Inventory contains damaged variants." + ); + + return; + + } + + if (EnchantedVariantsDAO.hasEnchantedVariants( + warehouseItem.inventoryId() + )) { + + player.sendMessage( + "§cCannot delete. Inventory contains enchanted variants." + ); + + return; + + } + + if (PartiallyFilledVariantsDAO.hasPartiallyFilledVariants( + warehouseItem.inventoryId() + )) { + + player.sendMessage( + "§cCannot delete. Inventory contains partially filled variants." + ); + + return; + + } + + WarehouseReferenceDAO.deleteItemReference( + warehouseItem.id() + ); + + InventoryQuantityDAO.deleteInventory( + warehouseItem.inventoryId() + ); + + player.sendMessage( + "§aItem deleted." + ); + + player.closeInventory(); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/itemdao/ItemDAO.java b/src/main/java/com/rsscripting/rswarehouse/item/itemdao/ItemDAO.java new file mode 100644 index 0000000..14d95a1 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/itemdao/ItemDAO.java @@ -0,0 +1,370 @@ +package com.rsscripting.rswarehouse.item.itemdao; + +import com.rsscripting.rswarehouse.RSWarehouse; +import com.rsscripting.rswarehouse.discovery.discoverydao.DiscoveryDAO; +import com.rsscripting.rswarehouse.inventory.inventorydao.InventoryCreationDAO; +import com.rsscripting.rswarehouse.inventory.inventorydao.InventoryLookupDAO; +import com.rsscripting.rswarehouse.inventory.InventoryQuantityDAO; +import com.rsscripting.rswarehouse.references.referencesdao.WarehouseReferenceDAO; +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.inventory.ItemStack; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; + + +public class ItemDAO { + + public static void addItem( + String discovererUuid, + String discovererName, + ItemStack item, + long quantity, + Integer inventoryId + ) { + + item = ItemStackUtils.normalizeSpecialItems(item); + + String serializedItem = + ItemStackUtils.serialize( + item + ); + + if (serializedItem == null) { + return; + } + + boolean enableUncategorized = + RSWarehouse.getInstance() + .getConfig() + .getBoolean( + "allow-uncategorized-item-creation", + true + ); + + if ( + inventoryId == null + && !enableUncategorized + ) { + + return; + + } + + if (inventoryId != null) { + + long previousQuantity = + InventoryQuantityDAO.getInventoryQuantity( + inventoryId + ); + + InventoryQuantityDAO.updateInventoryQuantity( + inventoryId, + quantity + ); + + if (previousQuantity == 0) { + + DiscoveryDAO.assignDiscovererIfNull( + inventoryId, + discovererUuid, + discovererName + ); + + } + + return; + + } + + inventoryId = + InventoryCreationDAO.createInventoryItem( + item, + quantity, + discovererUuid, + discovererName + ); + + if (inventoryId == -1) { + + return; + + } + + WarehouseReferenceDAO.createWarehouseItemReference( + item, + inventoryId + ); + + } + + public static WarehouseItem getItemById( + int itemId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT + wi.*, + inv.quantity, + inv.discoverer_uuid, + inv.discoverer_name, + inv.discovered_date + FROM warehouse_items wi + LEFT JOIN warehouse_inventory inv + ON wi.inventory_id = inv.id + WHERE wi.id = ? + """ + ); + + statement.setInt( + 1, + itemId + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return new WarehouseItem( + + resultSet.getInt("id"), + + resultSet.getInt("category_id"), + resultSet.getString("serialized_item"), + + resultSet.getString("default_lore"), + + resultSet.getObject("inventory_id") == null + ? null + : resultSet.getInt("inventory_id"), + + resultSet.getObject("subcategory_id") == null + ? null + : resultSet.getInt("subcategory_id"), + + resultSet.getLong("quantity"), + + resultSet.getString("discoverer_uuid"), + + resultSet.getString("discoverer_name"), + + resultSet.getString("discovered_date"), + + resultSet.getObject("page") == null + ? null + : resultSet.getInt("page"), + + resultSet.getObject("slot") == null + ? null + : resultSet.getInt("slot") + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return null; + + } + + public static List getItemsForCategory( + int categoryId + ) { + + List items = + new ArrayList<>(); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT + wi.*, + inv.quantity, + inv.discoverer_uuid, + inv.discoverer_name, + inv.discovered_date + FROM warehouse_items wi + LEFT JOIN warehouse_inventory inv + ON wi.inventory_id = inv.id + WHERE wi.category_id = ? + ORDER BY wi.id + """ + ); + + statement.setInt( + 1, + categoryId + ); + + ResultSet resultSet = + statement.executeQuery(); + + while (resultSet.next()) { + + items.add( + new WarehouseItem( + + resultSet.getInt("id"), + + resultSet.getInt("category_id"), + + resultSet.getString("serialized_item"), + + resultSet.getString("default_lore"), + + resultSet.getObject("inventory_id") == null + ? null + : resultSet.getInt("inventory_id"), + + resultSet.getObject("subcategory_id") == null + ? null + : resultSet.getInt("subcategory_id"), + + resultSet.getLong("quantity"), + + resultSet.getString("discoverer_uuid"), + + resultSet.getString("discoverer_name"), + + resultSet.getString("discovered_date"), + + resultSet.getObject("page") == null + ? null + : resultSet.getInt("page"), + + resultSet.getObject("slot") == null + ? null + : resultSet.getInt("slot") + ) + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return items; + + } + + public static void removeItem( + ItemStack item, + long quantity + ) { + + Integer inventoryId = + InventoryLookupDAO.findInventoryId( + item + ); + + if (inventoryId == null) { + + return; + + } + + InventoryQuantityDAO.removeInventoryQuantity( + inventoryId, + quantity + ); + + } + + public static void addItem( + String discovererUuid, + String discovererName, + ItemStack item, + long quantity + ) { + + addItem( + discovererUuid, + discovererName, + item, + quantity, + InventoryLookupDAO.findInventoryId( + item + ) + ); + + } + + public static boolean categoryHasItems( + int categoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT COUNT(*) + FROM warehouse_items + WHERE category_id = ? + """ + ) + + ) { + + statement.setInt( + 1, + categoryId + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return resultSet.getInt( + 1 + ) > 0; + + } + + } + + catch (Exception exception) { + + exception.printStackTrace(); + + } + + return false; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenu.java b/src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenu.java new file mode 100644 index 0000000..66cf8db --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenu.java @@ -0,0 +1,253 @@ +package com.rsscripting.rswarehouse.item.options; + +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import com.rsscripting.rswarehouse.references.referencesdao.WarehouseReferenceDAO; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; + +import java.util.List; + +public class ItemOptionsMenu { + + public static void open( + Player player, + int itemId + ) { + + Inventory menu = + Bukkit.createInventory( + new ItemOptionsMenuHolder( + itemId + ), + 36, + Component.text( + "Item Options" + ).color( + NamedTextColor.BLUE + ) + ); + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem( + i, + RSMenuUtils.createFillerPane() + ); + + } + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + itemId + ); + + boolean isSubCategory = + warehouseItem != null + && + warehouseItem.subcategoryId() != null; + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§eBack" + ) + ); + + if (isSubCategory) { + + menu.setItem( + 10, + RSMenuUtils.createMenuItemWithLore( + Material.CRAFTER, + "§7Already A SubCategory", + List.of( + "§7This item is already", + "§7a SubCategory link.", + "", + "§cCannot convert again." + ) + ) + ); + + menu.setItem( + 25, + RSMenuUtils.createMenuItem( + Material.NAME_TAG, + "§eEdit Display Name" + ) + ); + + menu.setItem( + 28, + RSMenuUtils.createMenuItem( + Material.WRITABLE_BOOK, + "§eEdit Lore" + ) + ); + + + } else { + + menu.setItem( + 10, + RSMenuUtils.createMenuItem( + Material.CRAFTER, + "§eConvert To New SubCategory" + ) + ); + + + menu.setItem( + 25, + RSMenuUtils.createMenuItemWithLore( + Material.NAME_TAG, + "§4Not A SubCategory", + List.of( + "§7This option is only", + "§7available for SubCategories." + ) + ) + ); + + menu.setItem( + 28, + RSMenuUtils.createMenuItemWithLore( + Material.WRITABLE_BOOK, + "§4Not A SubCategory", + List.of( + "§7This option is only", + "§7available for SubCategories." + ) + ) + ); + + } + + boolean canDelete = false; + + if (warehouseItem != null && + warehouseItem.subcategoryId() == null) { + + int references = + WarehouseReferenceDAO.countInventoryReferences( + warehouseItem.inventoryId() + ); + + if (references > 1) { + + canDelete = true; + + } else if (warehouseItem.quantity() == 0) { + + canDelete = true; + + } + + } + + menu.setItem( + 12, + RSMenuUtils.createMenuItem( + Material.BOOK, + "§eAssign Page/Slot" + ) + ); + + menu.setItem( + 14, + RSMenuUtils.createMenuItem( + Material.PISTON, + "§eMove to Category" + ) + ); + + menu.setItem( + 16, + RSMenuUtils.createMenuItem( + Material.STICKY_PISTON, + "§eMove to SubCategory" + ) + ); + + if (canDelete) { + + menu.setItem( + 19, + RSMenuUtils.createMenuItemWithLore( + Material.BARRIER, + "§4Delete Item", + List.of( + "§4CAUTION!! CAUTION!! CAUTION!!", + "§7This is irreversible." + ) + ) + ); + + } + else if (isSubCategory) { + + menu.setItem( + 19, + RSMenuUtils.createMenuItemWithLore( + Material.BARRIER, + "§4Delete SubCategory", + List.of( + "§4CAUTION!! CAUTION!! CAUTION!!", + "§7Deletes this SubCategory", + "§7if it contains no items." + ) + ) + ); + + } + else { + + menu.setItem( + 19, + RSMenuUtils.createMenuItemWithLore( + Material.BARRIER, + "§4Cannot Delete Item", + List.of( + "§7This is the last reference.", + "§7Inventory still contains items.", + "", + "§7Remove or move the items", + "§7before deleting this reference." + ) + ) + ); + + } + + menu.setItem( + 21, + RSMenuUtils.createMenuItem( + Material.OAK_SIGN, + "§eCopy to Category" + ) + ); + + + + menu.setItem( + 23, + RSMenuUtils.createMenuItem( + Material.OAK_HANGING_SIGN, + "§eCopy to SubCategory" + ) + ); + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenuHolder.java b/src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenuHolder.java new file mode 100644 index 0000000..b73e4df --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenuHolder.java @@ -0,0 +1,29 @@ +package com.rsscripting.rswarehouse.item.options; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; + +public class ItemOptionsMenuHolder + extends RSMenuHolder { + + private final int itemId; + + public ItemOptionsMenuHolder( + int itemId + ) { + + super( + "ITEM_OPTIONS" + ); + + this.itemId = + itemId; + + } + + public int getItemId() { + + return itemId; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenuListener.java new file mode 100644 index 0000000..4e946b8 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/item/options/ItemOptionsMenuListener.java @@ -0,0 +1,321 @@ +package com.rsscripting.rswarehouse.item.options; + +import com.rsscripting.rswarehouse.category.copytocategory.CopyToCategoryMenu; +import com.rsscripting.rswarehouse.subcategory.copytosubcategory.CopyToSubCategoryMenu; +import com.rsscripting.rswarehouse.item.deleteitem.DeleteConfirmationMenu; +import com.rsscripting.rswarehouse.category.movetocategory.MoveToCategoryMenu; +import com.rsscripting.rswarehouse.subcategory.movetosubcategory.MoveToSubCategoryMenu; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSessionManager; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSessionManager; +import com.rsscripting.rswarehouse.subcategory.items.SubCategoryEditDisplayNameMenu; +import com.rsscripting.rswarehouse.subcategory.items.SubCategoryEditLoreMenu; +import com.rsscripting.rswarehouse.subcategory.items.SubCategoryInternalNameMenu; +import com.rsscripting.rswarehouse.admin.adminsessions.PageSlotAssignmentSessionManager; +import com.rsscripting.rswarehouse.admin.assignpageslot.PageNumberMenu; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.subcategory.subcategorydao.SubCategoryDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.references.referencesdao.WarehouseReferenceDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class ItemOptionsMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getWhoClicked() + instanceof Player player)) { + + return; + + } + + if (!(event.getInventory() + .getHolder() + instanceof ItemOptionsMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "ITEM_OPTIONS" + )) { + + return; + + } + + event.setCancelled( + true + ); + + if (event.getSlot() == 4) { + + player.closeInventory(); + + return; + + } + + if (event.getSlot() == 12) { + + PageSlotAssignmentSessionManager.createSession( + player.getUniqueId(), + holder.getItemId() + ); + + PageNumberMenu.open( + player + ); + + return; + + } + + if (event.getSlot() == 10) { + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + holder.getItemId() + ); + + if ( + warehouseItem != null + && + warehouseItem.subcategoryId() != null + ) { + + return; + + } + + SubCategoryCreationSessionManager.createSession( + player.getUniqueId(), + holder.getItemId() + ); + + SubCategoryInternalNameMenu.open( + player + ); + + return; + + } + + if (event.getSlot() == 14) { + + MoveToCategoryMenu.open( + player, + holder.getItemId() + ); + + } + + if (event.getSlot() == 16) { + + MoveToSubCategoryMenu.open( + player, + holder.getItemId(), + holder.getPage() + ); + + return; + + } + + if (event.getSlot() == 19) { + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + holder.getItemId() + ); + + if (warehouseItem == null) { + + return; + + } + + if (warehouseItem.subcategoryId() != null) { + + int references = + SubCategoryDAO.countSubCategoryReferences( + warehouseItem.subcategoryId() + ); + + // More than one link points to this SubCategory. + // Delete only this link item. + if (references > 1) { + + WarehouseReferenceDAO.deleteSubCategoryReference( + warehouseItem.id() + ); + + player.sendMessage( + "§aSubCategory link deleted." + ); + + player.closeInventory(); + + return; + + } + + // Last remaining link. + // Only allow deletion if the SubCategory contains no inventory references. + if (!SubCategoryDAO.isSubCategoryEmpty( + warehouseItem.subcategoryId() + )) { + + player.sendMessage( + "§cThis SubCategory must be empty before it can be deleted." + ); + + return; + + } + + if (SubCategoryDAO.deleteSubCategoryAndLinkItem( + warehouseItem.subcategoryId(), + warehouseItem.id() + )) { + + player.sendMessage( + "§aSubCategory deleted." + ); + + } else { + + player.sendMessage( + "§cUnable to delete SubCategory." + ); + + } + + player.closeInventory(); + + return; + + } + + DeleteConfirmationMenu.open( + player, + holder.getItemId() + ); + + return; + + } + + if (event.getSlot() == 21) { + + CopyToCategoryMenu.open( + player, + holder.getItemId(), + 0 + ); + } + + if (event.getSlot() == 23) { + + CopyToSubCategoryMenu.open( + player, + holder.getItemId(), + 0 + ); + + return; + + } + + if (event.getSlot() == 25) { + + SubCategoryEditSession session = + createEditSession( + player, + holder.getItemId() + ); + + if (session == null) { + + return; + + } + + WarehouseCategory category = + CategoryDAO.getCategoryById( + session.getSubCategoryId() + ); + + SubCategoryEditDisplayNameMenu.open( + player, + category.displayName() + ); + + return; + + } + + if (event.getSlot() == 28) { + + SubCategoryEditSession session = + createEditSession( + player, + holder.getItemId() + ); + + if (session == null) { + + return; + + } + + SubCategoryEditLoreMenu.open( + player + ); + + return; + + } + + } + + private SubCategoryEditSession createEditSession( + Player player, + int itemId + ) { + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + itemId + ); + + if ( + warehouseItem == null + || + warehouseItem.subcategoryId() == null + ) { + + return null; + + } + + return SubCategoryEditSessionManager.createSession( + player.getUniqueId(), + itemId, + warehouseItem.subcategoryId() + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/main/MainMenu.java b/src/main/java/com/rsscripting/rswarehouse/main/MainMenu.java new file mode 100644 index 0000000..ce6cb9b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/main/MainMenu.java @@ -0,0 +1,98 @@ +package com.rsscripting.rswarehouse.main; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.constants.RSConstants; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; + +public class MainMenu { + + public static final String MENU_TITLE = "Main"; + + public static void open( + Player player, + Block block + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "MAIN" + ), + 18, + Component.text( + MENU_TITLE + ).color( + NamedTextColor.BLUE + ) + ); + + /* + |-------------------------------------------------------------------------- + | FILLER + |-------------------------------------------------------------------------- + */ + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem(i, filler); + + } + + /* + |-------------------------------------------------------------------------- + | CONVERT BACK + |-------------------------------------------------------------------------- + */ + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.COMPOSTER, + "§6Convert Back" + ) + ); + + /* + |-------------------------------------------------------------------------- + | ADMIN + |-------------------------------------------------------------------------- + */ + + if (player.hasPermission( + RSConstants.ADMIN_PERMISSION + )) { + + menu.setItem( + 6, + RSMenuUtils.createMenuItem( + Material.COMMAND_BLOCK, + "§cAdmin" + ) + ); + + } + + menu.setItem( + 11, + RSMenuUtils.createMenuItem( + Material.BOOKSHELF, + "§aOpen Warehouse" + ) + ); + + player.openInventory(menu); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/main/MainMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/main/MainMenuListener.java new file mode 100644 index 0000000..a30e5a4 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/main/MainMenuListener.java @@ -0,0 +1,178 @@ +package com.rsscripting.rswarehouse.main; + +import com.rsscripting.rswarehouse.deposit.dao.WarehouseChestDAO; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.admin.AdminMenu; +import com.rsscripting.rswarehouse.conversion.ConvertMenuListener; +import com.rsscripting.rswarehouse.constants.RSConstants; +import com.rsscripting.rswarehouse.navigation.NavigationManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.block.Block; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class MainMenuListener + implements Listener { + + private final ConvertMenuListener + conversionListener; + + public MainMenuListener( + ConvertMenuListener conversionListener + ) { + + this.conversionListener = + conversionListener; + + } + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + Player player = + (Player) event.getWhoClicked(); + + /* + |-------------------------------------------------------------------------- + | CONVERSION MENU + |-------------------------------------------------------------------------- + */ + + if (event.getInventory() + .getHolder() + instanceof RSMenuHolder holder + && holder.getMenuId() + .equals( + "CONVERT" + )) { + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + return; + } + + if (event.getRawSlot() == 4) { + + Block block = + conversionListener.getSelectedBlock(player); + + if (block == null){ + + player.closeInventory(); + + return; + + } + + RSMessageUtils.success( + player, + "Community Warehouse registered." + ); + + WarehouseChestDAO.registerChest( + block, + player + ); + + NavigationManager.clear(player); + + NavigationManager.openMain(player); + + } + + return; + + } + + /* + |-------------------------------------------------------------------------- + | MAIN MENU + |-------------------------------------------------------------------------- + */ + + if (event.getInventory() + .getHolder() + instanceof RSMenuHolder holder + && holder.getMenuId() + .equals( + "MAIN" + )) { + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + return; + } + + Block block = + conversionListener.getSelectedBlock(player); + + if (block == null) { + + player.closeInventory(); + + return; + + } + + /* + |-------------------------------------------------------------------------- + | CONVERT BACK + |-------------------------------------------------------------------------- + */ + + if (event.getRawSlot() == 4) { + + conversionListener.convertBack( + player + ); + + return; + + } + + /* + |-------------------------------------------------------------------------- + | ADMIN MENU + |-------------------------------------------------------------------------- + */ + + if (event.getRawSlot() == 6) { + + if (!player.isOp() + || + + !player.hasPermission( + RSConstants.ADMIN_PERMISSION + )) { + + return; + + } + + AdminMenu.open( + player + ); + + } + + if (event.getRawSlot() == 11) { + + NavigationManager.openCategory( + player, + 1 + ); + + } + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/menuholder/RSMenuHolder.java b/src/main/java/com/rsscripting/rswarehouse/menuholder/RSMenuHolder.java new file mode 100644 index 0000000..a30427d --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/menuholder/RSMenuHolder.java @@ -0,0 +1,57 @@ +package com.rsscripting.rswarehouse.menuholder; + +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.InventoryHolder; +import org.jetbrains.annotations.NotNull; + +public class RSMenuHolder + implements InventoryHolder { + + private final String menuId; + + private int page = 1; + + public RSMenuHolder( + String menuId + ) { + + this.menuId = menuId; + + } + + public String getMenuId() { + + return menuId; + + } + + public int getPage() { + + return page; + + } + + public void setPage( + int page + ) { + + if (page < 1) { + + page = 1; + + } + + this.page = page; + + } + + @Override + public @NotNull Inventory getInventory() { + + throw new UnsupportedOperationException( + "RSMenuHolder does not store an inventory." + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/model/DamagedVariant.java b/src/main/java/com/rsscripting/rswarehouse/model/DamagedVariant.java new file mode 100644 index 0000000..9b52f8f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/model/DamagedVariant.java @@ -0,0 +1,5 @@ +package com.rsscripting.rswarehouse.model; + +public record DamagedVariant(int id, int parentInventoryId, String serializedItem, long quantity, String lore) { + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/model/EnchantedVariant.java b/src/main/java/com/rsscripting/rswarehouse/model/EnchantedVariant.java new file mode 100644 index 0000000..ba278ad --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/model/EnchantedVariant.java @@ -0,0 +1,11 @@ +package com.rsscripting.rswarehouse.model; + +public record EnchantedVariant( + int id, + int parentInventoryId, + String serializedItem, + long quantity, + String lore +) { + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/model/PartiallyFilledVariant.java b/src/main/java/com/rsscripting/rswarehouse/model/PartiallyFilledVariant.java new file mode 100644 index 0000000..989ec80 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/model/PartiallyFilledVariant.java @@ -0,0 +1,12 @@ +package com.rsscripting.rswarehouse.model; + +public record PartiallyFilledVariant( + + int id, + int parentInventoryId, + String serializedItem, + long quantity, + String lore + +) { +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/model/WarehouseCategory.java b/src/main/java/com/rsscripting/rswarehouse/model/WarehouseCategory.java new file mode 100644 index 0000000..b213e3b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/model/WarehouseCategory.java @@ -0,0 +1,15 @@ +package com.rsscripting.rswarehouse.model; + +public record WarehouseCategory( + int id, + Integer parentCategoryId, + String internalName, + String displayName, + String material, + String lore, + int displayOrder, + int page, + int slot +) { + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/model/WarehouseItem.java b/src/main/java/com/rsscripting/rswarehouse/model/WarehouseItem.java new file mode 100644 index 0000000..6e991bf --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/model/WarehouseItem.java @@ -0,0 +1,30 @@ +package com.rsscripting.rswarehouse.model; + +public record WarehouseItem( + + int id, + + int categoryId, + + String serializedItem, + + String defaultLore, + + Integer inventoryId, + + Integer subcategoryId, + + long quantity, + + String discovererUuid, + + String discovererName, + + String discoveredDate, + + Integer page, + + Integer slot + +) { +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/model/WarehouseSubCategory.java b/src/main/java/com/rsscripting/rswarehouse/model/WarehouseSubCategory.java new file mode 100644 index 0000000..8c6d372 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/model/WarehouseSubCategory.java @@ -0,0 +1,15 @@ +package com.rsscripting.rswarehouse.model; + +public record WarehouseSubCategory( + + int id, + int categoryId, + String name, + String material, + String lore, + int displayOrder, + int page, + int slot + +) { +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationHistory.java b/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationHistory.java new file mode 100644 index 0000000..b97690c --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationHistory.java @@ -0,0 +1,71 @@ +package com.rsscripting.rswarehouse.navigation; + +import org.bukkit.entity.Player; + +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public final class NavigationHistory { + + private static final int MAX_HISTORY = 5; + + private static final Map> HISTORY = new HashMap<>(); + + private NavigationHistory() {} + + public static void push(Player player, NavigationLocation location) { + + Deque history = + HISTORY.computeIfAbsent(player.getUniqueId(), k -> new ArrayDeque<>()); + + if (!history.isEmpty() && history.peekLast().equals(location)) { + return; + } + + history.addLast(location); + + while (history.size() > MAX_HISTORY) { + history.removeFirst(); + } + } + + public static NavigationLocation pop(Player player) { + + Deque history = HISTORY.get(player.getUniqueId()); + + if (history == null || history.isEmpty()) { + return null; + } + + NavigationLocation location = history.removeLast(); + + return location; + } + + public static NavigationLocation peek(Player player) { + + Deque history = HISTORY.get(player.getUniqueId()); + + if (history == null || history.isEmpty()) { + return null; + } + + NavigationLocation location = history.peekLast(); + + return location; + } + + public static void clear(Player player) { + HISTORY.remove(player.getUniqueId()); + } + + public static int size(Player player) { + + Deque history = HISTORY.get(player.getUniqueId()); + + return history == null ? 0 : history.size(); + } +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationLocation.java b/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationLocation.java new file mode 100644 index 0000000..599fd4a --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationLocation.java @@ -0,0 +1,90 @@ +package com.rsscripting.rswarehouse.navigation; + +import org.bukkit.Material; + +import java.util.Objects; + +public class NavigationLocation { + + private final NavigationType type; + private final Integer categoryId; + private final String categoryName; + private final int page; + private final Material material; + + public NavigationLocation( + NavigationType type, + Integer categoryId, + String categoryName, + int page, + Material material) { + + this.type = type; + this.categoryId = categoryId; + this.categoryName = categoryName; + this.page = page; + this.material = material; + } + + public NavigationType getType() { + return type; + } + + public Integer getCategoryId() { + return categoryId; + } + + public String getCategoryName() { + return categoryName; + } + + public Integer getPage() { + return page; + } + + public Material getMaterial() { + return material; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof NavigationLocation other)) return false; + + return type == other.type && + Objects.equals(categoryId, other.categoryId) && + Objects.equals(categoryName, other.categoryName) && + Objects.equals(page, other.page) && + material == other.material; + } + + @Override + public int hashCode() { + return Objects.hash( + type, + categoryId, + categoryName, + page, + material); + } + + @Override + public String toString() { + + return switch (type) { + + case MAIN -> + "MAIN"; + + case CATEGORY -> + "CATEGORY(page=" + page + ")"; + + case ITEMS -> + "ITEMS(categoryId=" + categoryId + + ", name=" + categoryName + + ", page=" + page + ")"; + + }; + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationManager.java b/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationManager.java new file mode 100644 index 0000000..4310b1a --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationManager.java @@ -0,0 +1,150 @@ +package com.rsscripting.rswarehouse.navigation; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.item.ItemsMenu; +import com.rsscripting.rswarehouse.main.MainMenu; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import org.bukkit.entity.Player; + +public final class NavigationManager { + + private NavigationManager() { + } + + public static void openMain(Player player) { + openMain(player, true); + } + + private static void openMain( + Player player, + boolean addToHistory) { + + if (addToHistory) { + + NavigationHistory.push(player, + new NavigationLocation( + NavigationType.MAIN, + null, + null, + 1, + null)); + } + + MainMenu.open( + player, + GuiSessionManager + .getSession(player) + .getSelectedBlock()); + } + + public static void openCategory( + Player player, + int page) { + + openCategory(player, page, true); + } + + private static void openCategory( + Player player, + int page, + boolean addToHistory) { + + if (addToHistory) { + + NavigationHistory.push(player, + new NavigationLocation( + NavigationType.CATEGORY, + null, + null, + page, + null)); + } + + CategoryMenu.open( + player, + page); + } + + public static void openItems( + Player player, + int categoryId, + String categoryName, + int page) { + + openItems( + player, + categoryId, + categoryName, + page, + true); + } + + private static void openItems( + Player player, + int categoryId, + String categoryName, + int page, + boolean addToHistory) { + + if (addToHistory) { + + NavigationHistory.push(player, + new NavigationLocation( + NavigationType.ITEMS, + categoryId, + categoryName, + page, + null)); + } + + ItemsMenu.open( + player, + categoryId, + categoryName, + page); + } + + public static void back(Player player) { + + // Remove the current page. + NavigationHistory.pop(player); + + // Get the previous page. + NavigationLocation previous = + NavigationHistory.peek(player); + + if (previous == null) { + return; + } + + switch (previous.getType()) { + + case MAIN -> + openMain( + player, + false); + + case CATEGORY -> + openCategory( + player, + previous.getPage(), + false); + + case ITEMS -> + openItems( + player, + previous.getCategoryId(), + previous.getCategoryName(), + previous.getPage(), + false); + } + + } + + public static void clear(Player player) { + + NavigationHistory.clear(player); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationType.java b/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationType.java new file mode 100644 index 0000000..dc4a072 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/navigation/NavigationType.java @@ -0,0 +1,9 @@ +package com.rsscripting.rswarehouse.navigation; + +public enum NavigationType { + + MAIN, + CATEGORY, + ITEMS + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/otherlisteners/RSUpdateNotificationListener.java b/src/main/java/com/rsscripting/rswarehouse/otherlisteners/RSUpdateNotificationListener.java new file mode 100644 index 0000000..d4e5288 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/otherlisteners/RSUpdateNotificationListener.java @@ -0,0 +1,53 @@ +package com.rsscripting.rswarehouse.otherlisteners; + +import com.rsscripting.rswarehouse.updatechecker.GitHubUpdateChecker; +import com.rsscripting.rswarehouse.constants.RSConstants; +import com.rsscripting.rswarehouse.utils.VersionUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; + +public class RSUpdateNotificationListener implements Listener { + + @EventHandler + public void onPlayerJoin(PlayerJoinEvent event) { + + Player player = + event.getPlayer(); + + if (!player.isOp()) { + + return; + + } + + if (!GitHubUpdateChecker.isUpdateAvailable()) { + + return; + + } + + Bukkit.getScheduler().runTaskLater( + + org.bukkit.plugin.java.JavaPlugin + .getProvidingPlugin(getClass()), + + () -> player.sendMessage( + + RSConstants.PREFIX + + "Update available! Current: " + + VersionUtils.getVersion() + + " Latest: " + + GitHubUpdateChecker.getLatestVersion() + + ), + + 40L + + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/otherlisteners/WarehouseChestBreakListener.java b/src/main/java/com/rsscripting/rswarehouse/otherlisteners/WarehouseChestBreakListener.java new file mode 100644 index 0000000..a04d4d8 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/otherlisteners/WarehouseChestBreakListener.java @@ -0,0 +1,78 @@ +package com.rsscripting.rswarehouse.otherlisteners; + +import com.rsscripting.rswarehouse.deposit.dao.VerifyIsChestDAO; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.block.BlockBreakEvent; +import org.bukkit.block.Chest; +import org.bukkit.inventory.InventoryHolder; +import org.bukkit.block.DoubleChest; + +public class WarehouseChestBreakListener + implements Listener { + + @EventHandler + public void onBlockBreak( + BlockBreakEvent event + ) { + + Player player = + event.getPlayer(); + + boolean warehouseChest = + VerifyIsChestDAO.isWarehouseChest( + event.getBlock() + ); + + if (!warehouseChest + && event.getBlock().getState() + instanceof Chest chest) { + + InventoryHolder holder = + chest.getInventory() + .getHolder(); + + if (holder instanceof DoubleChest doubleChest) { + + if (doubleChest.getLeftSide() + instanceof Chest leftChest + && VerifyIsChestDAO.isWarehouseChest( + leftChest.getBlock() + )) { + + warehouseChest = true; + + } + + if (doubleChest.getRightSide() + instanceof Chest rightChest + && VerifyIsChestDAO.isWarehouseChest( + rightChest.getBlock() + )) { + + warehouseChest = true; + + } + + } + + } + + if (warehouseChest) { + + RSMessageUtils.error( + player, + "Convert the warehouse back before breaking it." + ); + + event.setCancelled( + true + ); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/placement/0 b/src/main/java/com/rsscripting/rswarehouse/placement/0 new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/rsscripting/rswarehouse/placement/placementdao/ItemPlacementDAO.java b/src/main/java/com/rsscripting/rswarehouse/placement/placementdao/ItemPlacementDAO.java new file mode 100644 index 0000000..b76b60a --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/placement/placementdao/ItemPlacementDAO.java @@ -0,0 +1,335 @@ +package com.rsscripting.rswarehouse.placement.placementdao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.model.WarehouseItem; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.SQLException; + +import static com.rsscripting.rswarehouse.item.itemdao.ItemDAO.getItemById; + +public class ItemPlacementDAO { + + public static void copyItemToCategory( + int itemId, + int categoryId + ) { + + String sql = """ + INSERT INTO warehouse_items ( + category_id, + serialized_item, + default_lore, + inventory_id, + subcategory_id, + created_at, + page, + slot + ) + SELECT + ?, + serialized_item, + default_lore, + inventory_id, + subcategory_id, + created_at, + NULL, + NULL + FROM warehouse_items + WHERE id = ? + """; + + try ( + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + sql + ) + ) { + + statement.setInt( + 1, + categoryId + ); + + statement.setInt( + 2, + itemId + ); + + statement.executeUpdate(); + + } + catch (SQLException e) { + + e.printStackTrace(); + + } + + } + + public static void clearPageSlot( + int categoryId, + int page, + int slot + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + + UPDATE warehouse_items + SET + page = NULL, + slot = NULL + WHERE + category_id = ? + AND + page = ? + AND + slot = ? + """ + ) + + ) { + + statement.setInt(1, categoryId); + statement.setInt(2, page); + statement.setInt(3, slot); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static void assignPageSlot( + int itemId, + int page, + int slot + ) { + + WarehouseItem item = + getItemById( + itemId + ); + + if (item != null) { + + clearPageSlot( + item.categoryId(), + page, + slot + ); + + } + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + UPDATE warehouse_items + SET + page = ?, + slot = ? + WHERE + id = ? + """ + ) + + ) { + + statement.setInt(1, page); + statement.setInt(2, slot); + statement.setInt(3, itemId); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static void moveItemToCategory( + int itemId, + int categoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + UPDATE warehouse_items + SET + category_id = ?, + page = NULL, + slot = NULL + WHERE id = ? + """ + ); + + statement.setInt( + 1, + categoryId + ); + + statement.setInt( + 2, + itemId + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + + public static void cloneItemToSubCategory( + int itemId, + int subCategoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + INSERT INTO warehouse_items ( + category_id, + serialized_item, + default_lore, + inventory_id, + subcategory_id, + created_at, + page, + slot + ) + SELECT + ?, + serialized_item, + default_lore, + inventory_id, + NULL, + created_at, + NULL, + NULL + FROM warehouse_items + WHERE id = ? + """ + ) + + ) { + + statement.setInt( + 1, + subCategoryId + ); + + statement.setInt( + 2, + itemId + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static void convertItemToSubCategoryLink( + int itemId, + int subCategoryId, + String lore + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + + UPDATE warehouse_items + SET + inventory_id = NULL, + subcategory_id = ?, + default_lore = ? + WHERE id = ? + """ + ) + + ) { + + statement.setInt( + 1, + subCategoryId + ); + + statement.setString( + 2, + lore + ); + + statement.setInt( + 3, + itemId + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/references/0 b/src/main/java/com/rsscripting/rswarehouse/references/0 new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/rsscripting/rswarehouse/references/referencesdao/WarehouseReferenceDAO.java b/src/main/java/com/rsscripting/rswarehouse/references/referencesdao/WarehouseReferenceDAO.java new file mode 100644 index 0000000..a063324 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/references/referencesdao/WarehouseReferenceDAO.java @@ -0,0 +1,232 @@ +package com.rsscripting.rswarehouse.references.referencesdao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.Bukkit; +import org.bukkit.inventory.ItemStack; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; + +import static com.rsscripting.rswarehouse.item.itemdao.ItemDAO.getItemById; + +public class WarehouseReferenceDAO { + + public static int countInventoryReferences( + int inventoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT COUNT(*) + FROM warehouse_items + WHERE inventory_id = ? + """ + ) + + ) { + + statement.setInt( + 1, + inventoryId + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return resultSet.getInt( + 1 + ); + + } + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return 0; + + } + + public static boolean deleteItemReference( + int itemId + ) { + + WarehouseItem warehouseItem = + getItemById( + itemId + ); + + if ( + warehouseItem == null + || + warehouseItem.subcategoryId() != null + ) { + + return false; + + } + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE + FROM warehouse_items + WHERE id = ? + """ + ) + + ) { + + statement.setInt( + 1, + itemId + ); + + return statement.executeUpdate() > 0; + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return false; + + } + + public static void createWarehouseItemReference( + ItemStack item, + int inventoryId + ) { + + String serializedItem = + ItemStackUtils.serialize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + INSERT INTO warehouse_items ( + category_id, + serialized_item, + inventory_id, + default_lore, + created_at + ) + VALUES (?, ?, ?, ?, ?) + + """ + ); + + statement.setInt( + 1, + 1 + ); + + statement.setString( + 2, + serializedItem + ); + + statement.setInt( + 3, + inventoryId + ); + + statement.setString( + 4, + null + ); + + statement.setString( + 5, + String.valueOf( + System.currentTimeMillis() + ) + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + Bukkit.getLogger().severe( + "[RS-Warehouse] Failed creating warehouse_items reference." + ); + + e.printStackTrace(); + + } + + } + + public static boolean deleteSubCategoryReference( + int itemId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE + FROM warehouse_items + WHERE id = ? + """ + ) + + ) { + + statement.setInt( + 1, + itemId + ); + + return statement.executeUpdate() > 0; + + } + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return false; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/registration/ListenerRegistrar.java b/src/main/java/com/rsscripting/rswarehouse/registration/ListenerRegistrar.java new file mode 100644 index 0000000..71df706 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/registration/ListenerRegistrar.java @@ -0,0 +1,26 @@ +package com.rsscripting.rswarehouse.registration; + +import com.rsscripting.rswarehouse.RSWarehouse; +import org.bukkit.event.Listener; + +public final class ListenerRegistrar { + + private ListenerRegistrar() { + + } + + public static void register( + RSWarehouse plugin, + Listener listener + ) { + + plugin.getServer() + .getPluginManager() + .registerEvents( + listener, + plugin + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/registration/ListenerRegistration.java b/src/main/java/com/rsscripting/rswarehouse/registration/ListenerRegistration.java new file mode 100644 index 0000000..6124496 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/registration/ListenerRegistration.java @@ -0,0 +1,279 @@ +package com.rsscripting.rswarehouse.registration; + +import com.rsscripting.rswarehouse.RSWarehouse; +import com.rsscripting.rswarehouse.category.categorycreation.*; +import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditDisplayNameMenuListener; +import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditLoreMenuChatListener; +import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditLoreMenuListener; +import com.rsscripting.rswarehouse.category.categoryedit.CategoryEditMaterialMenuListener; +import com.rsscripting.rswarehouse.subcategory.items.*; +import com.rsscripting.rswarehouse.admin.AdminMenuListener; +import com.rsscripting.rswarehouse.admin.assignpageslot.CategoryPageNumberMenuListener; +import com.rsscripting.rswarehouse.admin.assignpageslot.CategorySlotNumberMenuListener; +import com.rsscripting.rswarehouse.admin.assignpageslot.PageNumberMenuListener; +import com.rsscripting.rswarehouse.admin.assignpageslot.SlotNumberMenuListener; +import com.rsscripting.rswarehouse.category.categoryoptions.CategoryOptionsMenuListener; +import com.rsscripting.rswarehouse.category.copytocategory.CopyToCategoryMenuListener; +import com.rsscripting.rswarehouse.subcategory.copytosubcategory.CopyToSubCategoryMenuListener; +import com.rsscripting.rswarehouse.item.deleteitem.DeleteConfirmationMenuListener; +import com.rsscripting.rswarehouse.item.options.ItemOptionsMenuListener; +import com.rsscripting.rswarehouse.category.movetocategory.MoveToCategoryMenuListener; +import com.rsscripting.rswarehouse.subcategory.movetosubcategory.MoveToSubCategoryMenuListener; +import com.rsscripting.rswarehouse.deposit.WarehouseCloseListener; +import com.rsscripting.rswarehouse.conversion.ConvertMenuListener; +import com.rsscripting.rswarehouse.autodeposit.AutoDepositMenuListener; +import com.rsscripting.rswarehouse.autodeposit.AutoDepositPickupListener; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenuListener; +import com.rsscripting.rswarehouse.variantsdamaged.DamagedVariantsMenuListener; +import com.rsscripting.rswarehouse.variantsdamaged.DamagedVariantsTransactionMenuListener; +import com.rsscripting.rswarehouse.variantsenchanted.EnchantedVariantsMenuListener; +import com.rsscripting.rswarehouse.variantsenchanted.EnchantedVariantsTransactionMenuListener; +import com.rsscripting.rswarehouse.item.ItemsMenuListener; +import com.rsscripting.rswarehouse.item.TransactionAmountMenuListener; +import com.rsscripting.rswarehouse.main.MainMenuListener; +import com.rsscripting.rswarehouse.otherlisteners.RSUpdateNotificationListener; +import com.rsscripting.rswarehouse.otherlisteners.WarehouseChestBreakListener; +import com.rsscripting.rswarehouse.variantspartiallyfilled.PartiallyFilledVariantsMenuListener; +import com.rsscripting.rswarehouse.variantspartiallyfilled.PartiallyFilledVariantsTransactionMenuListener; + +public final class ListenerRegistration { + + private ListenerRegistration() { + + } + + public static void registerAll( + RSWarehouse plugin + ) { + + ConvertMenuListener conversionListener = + new ConvertMenuListener(); + + ListenerRegistrar.register( + plugin, + conversionListener + ); + + ListenerRegistrar.register( + plugin, + new MainMenuListener( + conversionListener + ) + ); + + ListenerRegistrar.register( + plugin, + new SubCategoryDisplayNameMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryEditLoreMenuChatListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryEditLoreMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryEditDisplayNameMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryEditMaterialMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new SubCategoryInternalNameMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new SubCategoryLoreChatListener() + ); + + ListenerRegistrar.register( + plugin, + new SubCategoryLoreMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new MoveToSubCategoryMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new RSUpdateNotificationListener() + ); + + ListenerRegistrar.register( + plugin, + new SubCategoryEditDisplayNameMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new SubCategoryEditLoreMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new SubCategoryEditLoreChatListener() + ); + + ListenerRegistrar.register( + plugin, + new DeleteConfirmationMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new ItemOptionsMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new AdminMenuListener( + conversionListener + ) + ); + + ListenerRegistrar.register( + plugin, + new CategoryLoreMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new EnchantedVariantsMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new EnchantedVariantsTransactionMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new PartiallyFilledVariantsTransactionMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryLoreChatListener() + ); + + ListenerRegistrar.register( + plugin, + new MoveToCategoryMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new AutoDepositMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new AutoDepositPickupListener() + ); + + ListenerRegistrar.register( + plugin, + new WarehouseChestBreakListener() + ); + + ListenerRegistrar.register( + plugin, + new WarehouseCloseListener() + ); + + ListenerRegistrar.register( + plugin, + new PartiallyFilledVariantsMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryNameMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryDisplayNameMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryMaterialPickerMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new ItemsMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new DamagedVariantsMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new DamagedVariantsTransactionMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new TransactionAmountMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new PageNumberMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new SlotNumberMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CopyToSubCategoryMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CopyToCategoryMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryOptionsMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategoryPageNumberMenuListener() + ); + + ListenerRegistrar.register( + plugin, + new CategorySlotNumberMenuListener() + ); + + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/session/CategoryCreationSession.java b/src/main/java/com/rsscripting/rswarehouse/session/CategoryCreationSession.java new file mode 100644 index 0000000..c6d441a --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/session/CategoryCreationSession.java @@ -0,0 +1,160 @@ +package com.rsscripting.rswarehouse.session; + +public class CategoryCreationSession { + + private boolean categoryInternalNameMenuOpen; + + private boolean categoryDisplayNameMenuOpen; + + private String pendingCategoryInternalName; + + private String pendingCategoryDisplayName; + + private String pendingCategoryMaterial; + + private final String[] pendingCategoryLore = + new String[5]; + + private int pendingCategoryLoreSlot = -1; + + private long pendingCategoryLoreExpiration; + + public boolean isCategoryInternalNameMenuOpen() { + + return categoryInternalNameMenuOpen; + + } + + public void setCategoryInternalNameMenuOpen( + boolean categoryInternalNameMenuOpen + ) { + + this.categoryInternalNameMenuOpen = + categoryInternalNameMenuOpen; + + } + + public boolean isCategoryDisplayNameMenuOpen() { + + return categoryDisplayNameMenuOpen; + + } + + public void setCategoryDisplayNameMenuOpen( + boolean categoryDisplayNameMenuOpen + ) { + + this.categoryDisplayNameMenuOpen = + categoryDisplayNameMenuOpen; + + } + + public String getPendingCategoryInternalName() { + + return pendingCategoryInternalName; + + } + + public void setPendingCategoryInternalName( + String pendingCategoryInternalName + ) { + + this.pendingCategoryInternalName = + pendingCategoryInternalName; + + } + + public String getPendingCategoryDisplayName() { + + return pendingCategoryDisplayName; + + } + + public void setPendingCategoryDisplayName( + String pendingCategoryDisplayName + ) { + + this.pendingCategoryDisplayName = + pendingCategoryDisplayName; + + } + + public String getPendingCategoryMaterial() { + + return pendingCategoryMaterial; + + } + + public void setPendingCategoryMaterial( + String pendingCategoryMaterial + ) { + + this.pendingCategoryMaterial = + pendingCategoryMaterial; + + } + + public String getPendingCategoryLore( + int index + ) { + + return pendingCategoryLore[index]; + + } + + public void setPendingCategoryLore( + int index, + String value + ) { + + pendingCategoryLore[index] = + value; + + } + + public void clearPendingCategoryLore() { + + for ( + int i = 0; + i < pendingCategoryLore.length; + i++ + ) { + + pendingCategoryLore[i] = + null; + + } + + } + + public int getPendingCategoryLoreSlot() { + + return pendingCategoryLoreSlot; + + } + + public void setPendingCategoryLoreSlot( + int pendingCategoryLoreSlot + ) { + + this.pendingCategoryLoreSlot = + pendingCategoryLoreSlot; + + } + + public long getPendingCategoryLoreExpiration() { + + return pendingCategoryLoreExpiration; + + } + + public void setPendingCategoryLoreExpiration( + long pendingCategoryLoreExpiration + ) { + + this.pendingCategoryLoreExpiration = + pendingCategoryLoreExpiration; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/session/GuiSession.java b/src/main/java/com/rsscripting/rswarehouse/session/GuiSession.java new file mode 100644 index 0000000..00e59a2 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/session/GuiSession.java @@ -0,0 +1,504 @@ +package com.rsscripting.rswarehouse.session; + +import org.bukkit.block.Block; + +import java.util.UUID; + +public class GuiSession { + + /* +|-------------------------------------------------------------------------- +| Player Session +|-------------------------------------------------------------------------- +*/ + + private final UUID playerUuid; + + private Block selectedBlock; + + public GuiSession( + UUID playerUuid + ) { + + this.playerUuid = + playerUuid; + + } + +/* +|-------------------------------------------------------------------------- +| Category Creation +|-------------------------------------------------------------------------- +*/ + + private final CategoryCreationSession + categoryCreationSession = + new CategoryCreationSession(); + + private int autoDepositPage; + + private int materialPickerPage; + +/* +|-------------------------------------------------------------------------- +| SubCategory Creation +|-------------------------------------------------------------------------- +*/ + + private final SubCategoryCreationSession + subCategoryCreationSession = + new SubCategoryCreationSession(); + + private final ItemBrowserSession + itemBrowserSession = + new ItemBrowserSession(); + +/* +|-------------------------------------------------------------------------- +| Item Browser +|-------------------------------------------------------------------------- +*/ + + public int getItemsCategoryId() { + + return itemBrowserSession + .getItemsCategoryId(); + + } + + public void setItemsCategoryId( + int itemsCategoryId + ) { + + itemBrowserSession + .setItemsCategoryId( + itemsCategoryId + ); + + } + + public String getItemsCategoryName() { + + return itemBrowserSession + .getItemsCategoryName(); + + } + + public void setItemsCategoryName( + String itemsCategoryName + ) { + + itemBrowserSession + .setItemsCategoryName( + itemsCategoryName + ); + + } + + public int getItemsPage() { + + return itemBrowserSession + .getItemsPage(); + + } + + public void setItemsPage( + int itemsPage + ) { + + itemBrowserSession + .setItemsPage( + itemsPage + ); + + } + + private TransactionSession transactionSession; + +/* +|-------------------------------------------------------------------------- +| Transactions +|-------------------------------------------------------------------------- +*/ + + public TransactionSession getItemActionSession() { + + return transactionSession; + + } + + public void setItemActionSession( + TransactionSession transactionSession + ) { + + this.transactionSession = + transactionSession; + + } + +/* +|-------------------------------------------------------------------------- +| Player Session +|-------------------------------------------------------------------------- +*/ + + public UUID getPlayerUuid() { + + return playerUuid; + + } + + public Block getSelectedBlock() { + + return selectedBlock; + + } + + public void setSelectedBlock( + Block selectedBlock + ) { + + this.selectedBlock = + selectedBlock; + + } + +/* +|-------------------------------------------------------------------------- +| Category Creation +|-------------------------------------------------------------------------- +*/ + + public boolean isCategoryInternalNameMenuOpen() { + + return categoryCreationSession + .isCategoryInternalNameMenuOpen(); + + } + + public void setCategoryInternalNameMenuOpen( + boolean categoryInternalNameMenuOpen + ) { + + categoryCreationSession + .setCategoryInternalNameMenuOpen( + categoryInternalNameMenuOpen + ); + + } + + public boolean isCategoryDisplayNameMenuOpen() { + + return categoryCreationSession + .isCategoryDisplayNameMenuOpen(); + + } + + public void setCategoryDisplayNameMenuOpen( + boolean categoryDisplayNameMenuOpen + ) { + + categoryCreationSession + .setCategoryDisplayNameMenuOpen( + categoryDisplayNameMenuOpen + ); + + } + + public String getPendingCategoryInternalName() { + + return categoryCreationSession + .getPendingCategoryInternalName(); + + } + + public void setPendingCategoryInternalName( + String pendingCategoryInternalName + ) { + + categoryCreationSession + .setPendingCategoryInternalName( + pendingCategoryInternalName + ); + + } + + public String getPendingCategoryDisplayName() { + + return categoryCreationSession + .getPendingCategoryDisplayName(); + + } + + public void setPendingCategoryDisplayName( + String pendingCategoryDisplayName + ) { + + categoryCreationSession + .setPendingCategoryDisplayName( + pendingCategoryDisplayName + ); + + } + + public String getPendingCategoryMaterial() { + + return categoryCreationSession + .getPendingCategoryMaterial(); + + } + + public void setPendingCategoryMaterial( + String pendingCategoryMaterial + ) { + + categoryCreationSession + .setPendingCategoryMaterial( + pendingCategoryMaterial + ); + + } + + public String getPendingCategoryLore( + int index + ) { + + return categoryCreationSession + .getPendingCategoryLore( + index + ); + + } + + public void setPendingCategoryLore( + int index, + String value + ) { + + categoryCreationSession + .setPendingCategoryLore( + index, + value + ); + + } + + public void clearPendingCategoryLore() { + + categoryCreationSession + .clearPendingCategoryLore(); + + } + + public int getPendingCategoryLoreSlot() { + + return categoryCreationSession + .getPendingCategoryLoreSlot(); + + } + + public void setPendingCategoryLoreSlot( + int pendingCategoryLoreSlot + ) { + + categoryCreationSession + .setPendingCategoryLoreSlot( + pendingCategoryLoreSlot + ); + + } + + public long getPendingCategoryLoreExpiration() { + + return categoryCreationSession + .getPendingCategoryLoreExpiration(); + + } + + public void setPendingCategoryLoreExpiration( + long pendingCategoryLoreExpiration + ) { + + categoryCreationSession + .setPendingCategoryLoreExpiration( + pendingCategoryLoreExpiration + ); + + } + + public int getMaterialPickerPage() { + + return materialPickerPage; + + } + + public void setMaterialPickerPage( + int materialPickerPage + ) { + + this.materialPickerPage = + materialPickerPage; + + } + + /* +|-------------------------------------------------------------------------- +| SubCategory Creation +|-------------------------------------------------------------------------- +*/ + + public boolean isSubCategoryNameMenuOpen() { + + return subCategoryCreationSession + .isSubCategoryNameMenuOpen(); + + } + + public void setSubCategoryNameMenuOpen( + boolean subCategoryNameMenuOpen + ) { + + subCategoryCreationSession + .setSubCategoryNameMenuOpen( + subCategoryNameMenuOpen + ); + + } + + public boolean isSubCategoryDisplayNameMenuOpen() { + + return subCategoryCreationSession + .isSubCategoryDisplayNameMenuOpen(); + } + + public void setSubCategoryDisplayNameMenuOpen( + boolean subCategoryDisplayNameMenuOpen + ) { + + subCategoryCreationSession + .setSubCategoryDisplayNameMenuOpen( + subCategoryDisplayNameMenuOpen + ); + + } + + public String getPendingSubCategoryName() { + + return subCategoryCreationSession + .getPendingSubCategoryName(); + + } + + public void setPendingSubCategoryName( + String pendingSubCategoryName + ) { + + subCategoryCreationSession + .setPendingSubCategoryName( + pendingSubCategoryName + ); + + } + + public String getPendingSubCategoryDisplayName() { + + return subCategoryCreationSession + .getPendingSubCategoryDisplayName(); + + } + + public void setPendingSubCategoryDisplayName( + String pendingSubCategoryDisplayName + ) { + + subCategoryCreationSession + .setPendingSubCategoryDisplayName( + pendingSubCategoryDisplayName + ); + + } + + public String getPendingSubCategoryLore( + int index + ) { + + return subCategoryCreationSession + .getPendingSubCategoryLore( + index + ); + + } + + public void setPendingSubCategoryLore( + int index, + String value + ) { + + subCategoryCreationSession + .setPendingSubCategoryLore( + index, + value + ); + + } + + public void clearPendingSubCategoryLore() { + + subCategoryCreationSession + .clearPendingSubCategoryLore(); + + } + + public int getPendingSubCategoryLoreSlot() { + + return subCategoryCreationSession + .getPendingSubCategoryLoreSlot(); + + } + + public void setPendingSubCategoryLoreSlot( + int pendingSubCategoryLoreSlot + ) { + + subCategoryCreationSession + .setPendingSubCategoryLoreSlot( + pendingSubCategoryLoreSlot + ); + + } + + public long getPendingSubCategoryLoreExpiration() { + + return subCategoryCreationSession + .getPendingSubCategoryLoreExpiration(); + + } + + public void setPendingSubCategoryLoreExpiration( + long pendingSubCategoryLoreExpiration + ) { + + subCategoryCreationSession + .setPendingSubCategoryLoreExpiration( + pendingSubCategoryLoreExpiration + ); + + } + + public int getAutoDepositPage() { + + return autoDepositPage; + + } + + public void setAutoDepositPage( + int autoDepositPage + ) { + + this.autoDepositPage = + autoDepositPage; + + } + + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/session/GuiSessionManager.java b/src/main/java/com/rsscripting/rswarehouse/session/GuiSessionManager.java new file mode 100644 index 0000000..388166b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/session/GuiSessionManager.java @@ -0,0 +1,35 @@ +package com.rsscripting.rswarehouse.session; + +import org.bukkit.entity.Player; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class GuiSessionManager { + + private static final Map sessions = + new HashMap<>(); + + public static GuiSession getSession( + Player player + ) { + + return sessions.computeIfAbsent( + player.getUniqueId(), + GuiSession::new + ); + + } + + public static void removeSession( + Player player + ) { + + sessions.remove( + player.getUniqueId() + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/session/ItemActionSessionManager.java b/src/main/java/com/rsscripting/rswarehouse/session/ItemActionSessionManager.java new file mode 100644 index 0000000..af56a0f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/session/ItemActionSessionManager.java @@ -0,0 +1,49 @@ +package com.rsscripting.rswarehouse.session; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +public class ItemActionSessionManager { + + private static final Map< + UUID, + TransactionSession + > SESSIONS = + new HashMap<>(); + + public static TransactionSession getSession( + UUID playerUuid + ) { + + return SESSIONS.get( + playerUuid + ); + + } + + public static void createSession( + UUID playerUuid, + int itemId + ) { + + SESSIONS.put( + playerUuid, + new TransactionSession( + itemId + ) + ); + + } + + public static void removeSession( + UUID playerUuid + ) { + + SESSIONS.remove( + playerUuid + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/session/ItemBrowserSession.java b/src/main/java/com/rsscripting/rswarehouse/session/ItemBrowserSession.java new file mode 100644 index 0000000..16ec348 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/session/ItemBrowserSession.java @@ -0,0 +1,56 @@ +package com.rsscripting.rswarehouse.session; + +public class ItemBrowserSession { + + private int itemsCategoryId; + + private String itemsCategoryName; + + private int itemsPage; + + public int getItemsCategoryId() { + + return itemsCategoryId; + + } + + public void setItemsCategoryId( + int itemsCategoryId + ) { + + this.itemsCategoryId = + itemsCategoryId; + + } + + public String getItemsCategoryName() { + + return itemsCategoryName; + + } + + public void setItemsCategoryName( + String itemsCategoryName + ) { + + this.itemsCategoryName = + itemsCategoryName; + + } + + public int getItemsPage() { + + return itemsPage; + + } + + public void setItemsPage( + int itemsPage + ) { + + this.itemsPage = + itemsPage; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/session/SubCategoryCreationSession.java b/src/main/java/com/rsscripting/rswarehouse/session/SubCategoryCreationSession.java new file mode 100644 index 0000000..25688b3 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/session/SubCategoryCreationSession.java @@ -0,0 +1,143 @@ +package com.rsscripting.rswarehouse.session; + +public class SubCategoryCreationSession { + + private boolean subCategoryNameMenuOpen; + + private boolean subCategoryDisplayNameMenuOpen; + + private String pendingSubCategoryName; + + private String pendingSubCategoryDisplayName; + + private final String[] pendingSubCategoryLore = + new String[5]; + + private int pendingSubCategoryLoreSlot = -1; + + private long pendingSubCategoryLoreExpiration; + + public boolean isSubCategoryNameMenuOpen() { + + return subCategoryNameMenuOpen; + + } + + public void setSubCategoryNameMenuOpen( + boolean subCategoryNameMenuOpen + ) { + + this.subCategoryNameMenuOpen = + subCategoryNameMenuOpen; + + } + + public boolean isSubCategoryDisplayNameMenuOpen() { + + return subCategoryDisplayNameMenuOpen; + + } + + public void setSubCategoryDisplayNameMenuOpen( + boolean subCategoryDisplayNameMenuOpen + ) { + + this.subCategoryDisplayNameMenuOpen = + subCategoryDisplayNameMenuOpen; + + } + + public String getPendingSubCategoryName() { + + return pendingSubCategoryName; + + } + + public void setPendingSubCategoryName( + String pendingSubCategoryName + ) { + + this.pendingSubCategoryName = + pendingSubCategoryName; + + } + + public String getPendingSubCategoryDisplayName() { + + return pendingSubCategoryDisplayName; + + } + + public void setPendingSubCategoryDisplayName( + String pendingSubCategoryDisplayName + ) { + + this.pendingSubCategoryDisplayName = + pendingSubCategoryDisplayName; + + } + + public String getPendingSubCategoryLore( + int index + ) { + + return pendingSubCategoryLore[index]; + + } + + public void setPendingSubCategoryLore( + int index, + String value + ) { + + pendingSubCategoryLore[index] = + value; + + } + + public void clearPendingSubCategoryLore() { + + for ( + int i = 0; + i < pendingSubCategoryLore.length; + i++ + ) { + + pendingSubCategoryLore[i] = + null; + + } + + } + + public int getPendingSubCategoryLoreSlot() { + + return pendingSubCategoryLoreSlot; + + } + + public void setPendingSubCategoryLoreSlot( + int pendingSubCategoryLoreSlot + ) { + + this.pendingSubCategoryLoreSlot = + pendingSubCategoryLoreSlot; + + } + + public long getPendingSubCategoryLoreExpiration() { + + return pendingSubCategoryLoreExpiration; + + } + + public void setPendingSubCategoryLoreExpiration( + long pendingSubCategoryLoreExpiration + ) { + + this.pendingSubCategoryLoreExpiration = + pendingSubCategoryLoreExpiration; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/session/TransactionSession.java b/src/main/java/com/rsscripting/rswarehouse/session/TransactionSession.java new file mode 100644 index 0000000..adcf81b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/session/TransactionSession.java @@ -0,0 +1,82 @@ +package com.rsscripting.rswarehouse.session; + +public class TransactionSession { + + private final int warehouseItemId; + + private VariantType variantType; + + private Integer variantRecordId; + + private int amount; + + public TransactionSession( + int warehouseItemId + ) { + + this.warehouseItemId = + warehouseItemId; + + this.variantType = + VariantType.NONE; + + this.variantRecordId = + null; + + this.amount = + 0; + + } + + public int getWarehouseItemId() { + + return warehouseItemId; + + } + + public VariantType getVariantType() { + + return variantType; + + } + + public void setVariantType( + VariantType variantType + ) { + + this.variantType = + variantType; + + } + + public Integer getVariantRecordId() { + + return variantRecordId; + + } + + public void setVariantRecordId( + Integer variantRecordId + ) { + + this.variantRecordId = + variantRecordId; + + } + + public int getAmount() { + + return amount; + + } + + public void setAmount( + int amount + ) { + + this.amount = + amount; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/session/VariantType.java b/src/main/java/com/rsscripting/rswarehouse/session/VariantType.java new file mode 100644 index 0000000..d8111e9 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/session/VariantType.java @@ -0,0 +1,10 @@ +package com.rsscripting.rswarehouse.session; + +public enum VariantType { + + NONE, + DAMAGED, + ENCHANTED, + PARTIAL + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenu.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenu.java new file mode 100644 index 0000000..ee857dc --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenu.java @@ -0,0 +1,196 @@ +package com.rsscripting.rswarehouse.subcategory.copytosubcategory; + +import com.rsscripting.rswarehouse.subcategory.subcategorydao.SubCategoryDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class CopyToSubCategoryMenu { + + public static final String MENU_TITLE = + "Copy To SubCategory"; + + public static void open( + Player player, + int itemId, + int page + ) { + + Inventory menu = + Bukkit.createInventory( + new CopyToSubCategoryMenuHolder( + itemId, + page + ), + 54, + Component.text( + MENU_TITLE + ).color( + NamedTextColor.BLUE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int slot = 0; slot <= 8; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + for (int slot = 45; slot <= 53; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + List categories = + SubCategoryDAO.getSubCategories(); + + List displayCategories = + new ArrayList<>(); + + for (WarehouseCategory category : categories) { + displayCategories.add( + category + ); + } + + int pageSize = 36; + + int maxPage = + Math.max( + 0, + (displayCategories.size() - 1) + / pageSize + ); + + int startIndex = + page * pageSize; + + int endIndex = + Math.min( + startIndex + pageSize, + displayCategories.size() + ); + + boolean hasPrevious = + page > 0; + + boolean hasNext = + page < maxPage; + + if (hasPrevious) { + + menu.setItem( + 0, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aPrevious Page" + ) + ); + + } + + if (hasNext) { + + menu.setItem( + 8, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aNext Page" + ) + ); + + } + + int slot = 9; + + for ( + + int i = startIndex; + + i < endIndex; + + i++ + + ) { + + WarehouseCategory category = + displayCategories.get( + i + ); + + List lore = + new ArrayList<>(); + + if ( + category.lore() != null + && + !category.lore().isBlank() + ) { + + lore.addAll( + Arrays.asList( + category.lore().split("\n") + ) + ); + + } + + ItemStack icon = + RSMenuUtils.createMenuItemWithLore( + Material.valueOf( + category.material() + ), + "§a" + category.displayName(), + lore + ); + + ItemMeta meta = + icon.getItemMeta(); + + meta.getPersistentDataContainer().set( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER, + category.id() + ); + + icon.setItemMeta( + meta + ); + + menu.setItem( + slot++, + icon + ); + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenuHolder.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenuHolder.java new file mode 100644 index 0000000..0f97878 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenuHolder.java @@ -0,0 +1,41 @@ +package com.rsscripting.rswarehouse.subcategory.copytosubcategory; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; + +public class CopyToSubCategoryMenuHolder + extends RSMenuHolder { + + private final int itemId; + + private final int page; + + public CopyToSubCategoryMenuHolder( + int itemId, + int page + ) { + + super( + "COPY_TO_SUBCATEGORY" + ); + + this.itemId = + itemId; + + this.page = + page; + + } + + public int getItemId() { + + return itemId; + + } + + public int getPage() { + + return page; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenuListener.java new file mode 100644 index 0000000..62302aa --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/copytosubcategory/CopyToSubCategoryMenuListener.java @@ -0,0 +1,180 @@ +package com.rsscripting.rswarehouse.subcategory.copytosubcategory; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.placement.placementdao.ItemPlacementDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.item.ItemsMenu; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +public class CopyToSubCategoryMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getWhoClicked() + instanceof Player player)) { + + return; + + } + + if (!(event.getInventory() + .getHolder() + instanceof CopyToSubCategoryMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "COPY_TO_SUBCATEGORY" + )) { + + return; + + } + + event.setCancelled( + true + ); + + ItemStack clicked = + event.getCurrentItem(); + + if (clicked == null) { + + return; + + } + + ItemMeta meta = + clicked.getItemMeta(); + + if ( + clicked.getType() == Material.ARROW + ) { + + String name = + clicked.getItemMeta() + .getDisplayName(); + + if (name.equals("§aPrevious Page")) { + + CopyToSubCategoryMenu.open( + player, + holder.getItemId(), + holder.getPage() - 1 + ); + + return; + + } + + if (name.equals("§aNext Page")) { + + CopyToSubCategoryMenu.open( + player, + holder.getItemId(), + holder.getPage() + 1 + ); + + return; + + } + + } + + if (meta == null) { + + return; + + } + + Integer categoryId = + meta.getPersistentDataContainer().get( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER + ); + + if (categoryId == null) { + + return; + + } + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + holder.getItemId() + ); + + if ( + + warehouseItem != null + + && + + warehouseItem.subcategoryId() != null + + && + + warehouseItem.subcategoryId().equals( + categoryId + ) + + ) { + + player.sendMessage( + "§cYou cannot copy a subcategory link into the subcategory it references." + ); + + CopyToSubCategoryMenu.open( + player, + holder.getItemId(), + holder.getPage() + ); + + return; + + } + + ItemPlacementDAO.copyItemToCategory( + holder.getItemId(), + categoryId + ); + + player.sendMessage( + "§aItem copied successfully." + ); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + categoryId + ); + + if (category != null) { + + ItemsMenu.open( + player, + category.id(), + category.displayName(), + 0 + ); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryDisplayNameMenu.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryDisplayNameMenu.java new file mode 100644 index 0000000..7563138 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryDisplayNameMenu.java @@ -0,0 +1,86 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.AnvilView; + +import java.util.List; + +public class SubCategoryDisplayNameMenu { + + public static final String TITLE = + "SubCat Display Name"; + + public static void open(Player player) { + + AnvilView view = MenuType.ANVIL + .builder() + .title( + Component.text( + TITLE + ) + ) + .build(player); + + ItemStack confirm = new ItemStack(Material.LIME_WOOL); + + ItemMeta meta = confirm.getItemMeta(); + + meta.displayName( + Component.text("") + ); + + meta.lore( + List.of( + Component.text( + "Save and proceed to material picker." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta(meta); + + view.setItem( + 0, + confirm + ); + + + ItemStack cancel = new ItemStack(Material.RED_WOOL); + + ItemMeta metacancel = cancel.getItemMeta(); + + metacancel.displayName( + Component.text("") + ); + + metacancel.lore( + List.of( + Component.text( + "Cancel" + ).color( + NamedTextColor.WHITE + ) + ) + ); + + cancel.setItemMeta(metacancel); + + + view.setItem( + 1, + cancel + ); + + view.open(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryDisplayNameMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryDisplayNameMenuListener.java new file mode 100644 index 0000000..e0e5d1c --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryDisplayNameMenuListener.java @@ -0,0 +1,151 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import com.rsscripting.rswarehouse.admin.AdminMenu; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSessionManager; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.view.AnvilView; + +public class SubCategoryDisplayNameMenuListener implements Listener { + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains( + SubCategoryDisplayNameMenu.TITLE + )) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + SubCategoryCreationSession session = + SubCategoryCreationSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + return; + } + + if (event.getRawSlot() == 0) { + + String categoryName = + anvilView.getRenameText(); + + if (categoryName.length() > 25) { + + RSMessageUtils.error( + player, + "Category names may not exceed 25 characters." + ); + + return; + + } + + if (categoryName.isBlank()) { + + RSMessageUtils.error( + player, + "Category name cannot be empty." + ); + + return; + + } + + if ( + CategoryDAO.categoryExists( + categoryName + ) + ) { + + RSMessageUtils.error( + player, + "A category with that name already exists." + ); + + return; + + } + + session.setDisplayName( + categoryName + ); + + event.getView().getTopInventory().clear(); + + SubCategoryLoreMenu.open( + player + ); + + return; + + } + + if (event.getRawSlot() == 1) { + + event.getView().getTopInventory().clear(); + + AdminMenu.open( + player + ); + + } + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() + instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains( + SubCategoryDisplayNameMenu.TITLE + )) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditDisplayNameMenu.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditDisplayNameMenu.java new file mode 100644 index 0000000..e74e190 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditDisplayNameMenu.java @@ -0,0 +1,93 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.AnvilView; + +import java.util.List; + +public class SubCategoryEditDisplayNameMenu { + + public static final String TITLE = + "Edit Display Name"; + + public static void open( + Player player, + String currentDisplayName + ) { + + AnvilView view = MenuType.ANVIL + .builder() + .title( + Component.text( + TITLE + ) + ) + .build(player); + + ItemStack confirm = new ItemStack(Material.LIME_WOOL); + + ItemMeta meta = + confirm.getItemMeta(); + + meta.displayName( + Component.text( + currentDisplayName + ) + ); + + meta.lore( + List.of( + Component.text( + "§aSave display name." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta( + meta + ); + + view.setItem( + 0, + confirm + ); + + ItemStack cancel = new ItemStack(Material.RED_WOOL); + + ItemMeta metacancel = cancel.getItemMeta(); + + metacancel.displayName( + Component.text("") + ); + + metacancel.lore( + List.of( + Component.text( + "Cancel" + ).color( + NamedTextColor.WHITE + ) + ) + ); + + cancel.setItemMeta(metacancel); + + + view.setItem( + 1, + cancel + ); + + view.open(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditDisplayNameMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditDisplayNameMenuListener.java new file mode 100644 index 0000000..4e3aa7a --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditDisplayNameMenuListener.java @@ -0,0 +1,143 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import com.rsscripting.rswarehouse.admin.admindao.UpdateCategoryDAO; +import com.rsscripting.rswarehouse.item.options.ItemOptionsMenu; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.view.AnvilView; + +public class SubCategoryEditDisplayNameMenuListener implements Listener { + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains( + SubCategoryEditDisplayNameMenu.TITLE + )) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + SubCategoryEditSession session = + SubCategoryEditSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + return; + } + + if (event.getRawSlot() == 0) { + + String categoryName = + anvilView.getRenameText(); + + if (categoryName.length() > 25) { + + RSMessageUtils.error( + player, + "Category names may not exceed 25 characters." + ); + + return; + + } + + if (categoryName.isBlank()) { + + RSMessageUtils.error( + player, + "Category name cannot be empty." + ); + + return; + + } + + UpdateCategoryDAO.updateDisplayName( + session.getSubCategoryId(), + categoryName + ); + + event.getView().getTopInventory().clear(); + + ItemOptionsMenu.open( + player, + session.getItemId() + ); + + return; + + } + + if (event.getRawSlot() == 1) { + + event.getView().getTopInventory().clear(); + + ItemOptionsMenu.open( + player, + session.getItemId() + ); + + SubCategoryEditSessionManager.removeSession( + player.getUniqueId() + ); + + } + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() + instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains( + SubCategoryDisplayNameMenu.TITLE + )) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreChatListener.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreChatListener.java new file mode 100644 index 0000000..3865bd8 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreChatListener.java @@ -0,0 +1,144 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +public class SubCategoryEditLoreChatListener + implements Listener { + + @EventHandler + public void onPlayerChat( + AsyncPlayerChatEvent event + ) { + + Player player = + event.getPlayer(); + + SubCategoryEditSession session = + SubCategoryEditSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + int loreSlot = + session.getLoreSlot(); + + if (loreSlot < 0) { + + return; + + } + + event.setCancelled( + true + ); + + String message = + event.getMessage(); + + if (message.length() > 50) { + + RSMessageUtils.error( + player, + "Lore lines may not exceed 50 characters." + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> SubCategoryEditLoreMenu.open(player) + ); + + return; + + } + + if ( + message.equalsIgnoreCase( + "cancel" + ) + ) { + + session.setLoreSlot( + -1 + ); + + session.setLoreExpiration( + 0 + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> SubCategoryEditLoreMenu.open(player) + ); + + return; + + } + + if ( + message.equalsIgnoreCase("clear") + ) { + + session.setLore( + loreSlot, + "" + ); + + } + else { + + session.setLore( + loreSlot, + message + ); + + } + + session.setLoreSlot( + -1 + ); + + session.setLoreExpiration( + 0 + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> { + + RSMessageUtils.success( + player, + "Lore line saved." + ); + + SubCategoryEditLoreMenu.open(player); + + } + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreMenu.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreMenu.java new file mode 100644 index 0000000..7a2cb2c --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreMenu.java @@ -0,0 +1,173 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSessionManager; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class SubCategoryEditLoreMenu { + + public static void open( + Player player + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "SUBCATEGORY_EDIT_LORE" + ), + 27, + Component.text( + " Edit SubCategory Lore" + ) + ); + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem( + i, + RSMenuUtils.createFillerPane() + ); + + } + + SubCategoryEditSession session = + SubCategoryEditSessionManager.getSession( + player.getUniqueId() + ); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + session.getSubCategoryId() + ); + + String[] loreLines = + category.lore() == null + ? new String[5] + : category.lore().split("\n", -1); + + if (session.getLore(0) == null) { + + for (int i = 0; i < 5; i++) { + + if (i < loreLines.length) { + + session.setLore( + i, + loreLines[i] + ); + + } + + } + + } + + for (int i = 0; i < 5; i++) { + + ItemStack book = + new ItemStack( + Material.WRITABLE_BOOK + ); + + ItemMeta meta = + book.getItemMeta(); + + meta.displayName( + Component.text( + "Lore Line " + + (i + 1) + ) + ); + + List lore = + new ArrayList<>(); + + String value = + session.getLore( + i + ); + + if ( + value == null + || value.isBlank() + ) { + + lore.add( + Component.text( + "(Empty)" + ) + ); + + } + + else { + + lore.add( + Component.text( + value + ) + ); + + } + + lore.add( + Component.empty() + ); + + lore.add( + Component.text( + "Click to edit." + ) + ); + + meta.lore( + lore + ); + + book.setItemMeta( + meta + ); + + menu.setItem( + 11 + i, + book + ); + + } + + menu.setItem( + 22, + RSMenuUtils.createMenuItem( + Material.LIME_WOOL, + "§aSave Lore" + ) + ); + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§eBack" + ) + ); + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreMenuListener.java new file mode 100644 index 0000000..f2cebb9 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryEditLoreMenuListener.java @@ -0,0 +1,230 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import com.rsscripting.rswarehouse.admin.admindao.UpdateCategoryDAO; +import com.rsscripting.rswarehouse.item.options.ItemOptionsMenu; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryEditSessionManager; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class SubCategoryEditLoreMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "SUBCATEGORY_EDIT_LORE" + )) { + + return; + + } + + event.setCancelled( + true + ); + + Player player = + (Player) event.getWhoClicked(); + + SubCategoryEditSession session = + SubCategoryEditSessionManager.getSession( + player.getUniqueId() + ); + + switch (event.getSlot()) { + + case 4 -> { + + ItemOptionsMenu.open( + player, + session.getItemId() + ); + + } + + case 11 -> editLore( + player, + session, + 0 + ); + + case 12 -> editLore( + player, + session, + 1 + ); + + case 13 -> editLore( + player, + session, + 2 + ); + + case 14 -> editLore( + player, + session, + 3 + ); + + case 15 -> editLore( + player, + session, + 4 + ); + + case 22 -> saveLore( + player, + session + ); + + } + + } + + private void editLore( + Player player, + SubCategoryEditSession session, + int loreSlot + ){ + + session.setLoreSlot( + loreSlot + ); + + session.setLoreExpiration( + System.currentTimeMillis() + + 30000 + ); + + final long expiration = + session.getLoreExpiration(); + + Bukkit.getScheduler() + .runTaskLater( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> { + + if ( + session.getLoreExpiration() + != expiration + ) { + + return; + + } + + session.setLoreSlot( + -1 + ); + + session.setLoreExpiration( + 0 + ); + + RSMessageUtils.error( + player, + "Lore input timed out." + ); + + }, + 20L * 30 + ); + + player.closeInventory(); + + RSMessageUtils.info( + player, + "Enter lore for line " + + (loreSlot + 1) + + " in chat." + ); + + RSMessageUtils.info( + player, + "Type 'cancel' to abort." + ); + + RSMessageUtils.info( + player, + "Auto-Cancels after 30 seconds." + ); + + RSMessageUtils.info( + player, + "Type 'clear' to clear the lore line." + ); + + } + + private void saveLore( + Player player, + SubCategoryEditSession session + ) { + + StringBuilder loreBuilder = + new StringBuilder(); + + for (int i = 0; i < 5; i++) { + + String line = + session.getLore( + i + ); + + if (line == null) { + + line = ""; + + } + + loreBuilder.append( + line + ); + + if (i < 4) { + + loreBuilder.append( + "\n" + ); + + } + + } + + UpdateCategoryDAO.updateLore( + session.getSubCategoryId(), + loreBuilder.toString() + ); + + SubCategoryEditSessionManager.removeSession( + player.getUniqueId() + ); + + ItemOptionsMenu.open( + player, + session.getItemId() + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryInternalNameMenu.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryInternalNameMenu.java new file mode 100644 index 0000000..0679f34 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryInternalNameMenu.java @@ -0,0 +1,87 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.MenuType; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.inventory.view.AnvilView; + +import java.util.List; + + +public class SubCategoryInternalNameMenu { + + public static final String TITLE = + "SubCat Internal Name"; + + public static void open(Player player) { + + AnvilView view = MenuType.ANVIL + .builder() + .title( + Component.text( + TITLE + ) + ) + .build(player); + + ItemStack confirm = new ItemStack(Material.LIME_WOOL); + + ItemMeta meta = confirm.getItemMeta(); + + meta.displayName( + Component.text("") + ); + + meta.lore( + List.of( + Component.text( + "Save and proceed to material picker." + ).color( + NamedTextColor.WHITE + ) + ) + ); + + confirm.setItemMeta(meta); + + view.setItem( + 0, + confirm + ); + + + ItemStack cancel = new ItemStack(Material.RED_WOOL); + + ItemMeta metacancel = cancel.getItemMeta(); + + metacancel.displayName( + Component.text("") + ); + + metacancel.lore( + List.of( + Component.text( + "Cancel" + ).color( + NamedTextColor.WHITE + ) + ) + ); + + cancel.setItemMeta(metacancel); + + + view.setItem( + 1, + cancel + ); + + view.open(); + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryInternalNameMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryInternalNameMenuListener.java new file mode 100644 index 0000000..9f30a60 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryInternalNameMenuListener.java @@ -0,0 +1,135 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import com.rsscripting.rswarehouse.admin.AdminMenu; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.event.inventory.InventoryCloseEvent; +import org.bukkit.inventory.view.AnvilView; + +public class SubCategoryInternalNameMenuListener implements Listener { + + @EventHandler + public void onInventoryClick(InventoryClickEvent event) { + + if (!(event.getView() instanceof AnvilView anvilView)) { + return; + } + + if (!event.getView() + .title() + .toString() + .contains( + SubCategoryInternalNameMenu.TITLE + )) { + + return; + + } + + Player player = + (Player) event.getWhoClicked(); + + SubCategoryCreationSession session = + SubCategoryCreationSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + event.setCancelled(true); + + if (event.getCurrentItem() == null) { + return; + } + + if (event.getRawSlot() == 0) { + + String categoryName = + anvilView.getRenameText(); + + if (categoryName.length() > 25) { + + RSMessageUtils.error( + player, + "Category names may not exceed 25 characters." + ); + + return; + + } + + if (categoryName.isBlank()) { + + RSMessageUtils.error( + player, + "Category name cannot be empty." + ); + + return; + + } + + session.setInternalName( + categoryName + ); + + event.getView().getTopInventory().clear(); + + SubCategoryDisplayNameMenu.open( + player + ); + + return; + + } + + if (event.getRawSlot() == 1) { + + event.getView().getTopInventory().clear(); + + AdminMenu.open( + player + ); + + } + } + + @EventHandler + public void onInventoryClose( + InventoryCloseEvent event + ) { + + if (!(event.getView() + instanceof AnvilView)) { + + return; + + } + + if (!event.getView() + .title() + .toString() + .contains( + SubCategoryInternalNameMenu.TITLE + )) { + + return; + + } + + event.getView() + .getTopInventory() + .clear(); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreChatListener.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreChatListener.java new file mode 100644 index 0000000..e841fd9 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreChatListener.java @@ -0,0 +1,136 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSessionManager; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.AsyncPlayerChatEvent; + +public class SubCategoryLoreChatListener + implements Listener { + + @EventHandler + public void onPlayerChat( + AsyncPlayerChatEvent event + ) { + + Player player = + event.getPlayer(); + + SubCategoryCreationSession session = + SubCategoryCreationSessionManager.getSession( + player.getUniqueId() + ); + + if (session == null) { + + return; + + } + + int loreSlot = + session.getLoreSlot(); + + if (loreSlot < 0) { + + return; + + } + + event.setCancelled( + true + ); + + String message = + event.getMessage(); + + if (message.length() > 50) { + + RSMessageUtils.error( + player, + "Lore lines may not exceed 50 characters." + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> SubCategoryLoreMenu.open( + player + ) + ); + + return; + + } + + if ( + message.equalsIgnoreCase( + "cancel" + ) + ) { + + session.setLoreSlot( + -1 + ); + + session.setLoreExpiration( + 0 + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> SubCategoryLoreMenu.open( + player + ) + ); + + return; + + } + + session.setLore( + loreSlot, + message + ); + + session.setLoreSlot( + -1 + ); + + session.setLoreExpiration( + 0 + ); + + Bukkit.getScheduler() + .runTask( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> { + + RSMessageUtils.success( + player, + "Lore line saved." + ); + + SubCategoryLoreMenu.open( + player + ); + + } + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreMenu.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreMenu.java new file mode 100644 index 0000000..597d595 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreMenu.java @@ -0,0 +1,144 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSessionManager; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.ArrayList; +import java.util.List; + +public class SubCategoryLoreMenu { + + public static void open( + Player player + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "SUBCATEGORY_LORE" + ), + 27, + Component.text( + "SubCategory Lore" + ) + ); + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem( + i, + RSMenuUtils.createFillerPane() + ); + + } + + SubCategoryCreationSession session = + SubCategoryCreationSessionManager.getSession( + player.getUniqueId() + ); + + for (int i = 0; i < 5; i++) { + + ItemStack book = + new ItemStack( + Material.WRITABLE_BOOK + ); + + ItemMeta meta = + book.getItemMeta(); + + meta.displayName( + Component.text( + "Lore Line " + + (i + 1) + ) + ); + + List lore = + new ArrayList<>(); + + String value = + session.getLore( + i + ); + + if ( + value == null + || value.isBlank() + ) { + + lore.add( + Component.text( + "(Empty)" + ) + ); + + } + + else { + + lore.add( + Component.text( + value + ) + ); + + } + + lore.add( + Component.empty() + ); + + lore.add( + Component.text( + "Click to edit." + ) + ); + + meta.lore( + lore + ); + + book.setItemMeta( + meta + ); + + menu.setItem( + 11 + i, + book + ); + + } + + menu.setItem( + 22, + RSMenuUtils.createMenuItem( + Material.LIME_WOOL, + "§aCreate SubCategory" + ) + ); + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§eBack" + ) + ); + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreMenuListener.java new file mode 100644 index 0000000..d4d9328 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/items/SubCategoryLoreMenuListener.java @@ -0,0 +1,250 @@ +package com.rsscripting.rswarehouse.subcategory.items; + +import com.rsscripting.rswarehouse.admin.admindao.CreateSubCategoryDAO; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSession; +import com.rsscripting.rswarehouse.admin.adminsessions.SubCategoryCreationSessionManager; +import com.rsscripting.rswarehouse.placement.placementdao.ItemPlacementDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.item.ItemsMenu; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; + +public class SubCategoryLoreMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "SUBCATEGORY_LORE" + )) { + + return; + + } + + event.setCancelled( + true + ); + + Player player = + (Player) event.getWhoClicked(); + + SubCategoryCreationSession session = + SubCategoryCreationSessionManager.getSession( + player.getUniqueId() + ); + + switch (event.getSlot()) { + + case 4 -> SubCategoryDisplayNameMenu.open( + player + ); + + case 11 -> editLore( + player, + session, + 0 + ); + + case 12 -> editLore( + player, + session, + 1 + ); + + case 13 -> editLore( + player, + session, + 2 + ); + + case 14 -> editLore( + player, + session, + 3 + ); + + case 15 -> editLore( + player, + session, + 4 + ); + + case 22 -> createSubCategory( + player, + session + ); + + } + + } + + private void editLore( + Player player, + SubCategoryCreationSession session, + int loreSlot + ){ + + session.setLoreSlot( + loreSlot + ); + + session.setLoreExpiration( + System.currentTimeMillis() + + 30000 + ); + + final long expiration = + session.getLoreExpiration(); + + Bukkit.getScheduler() + .runTaskLater( + Bukkit.getPluginManager() + .getPlugin( + "RS-Warehouse" + ), + () -> { + + if ( + session.getLoreExpiration() + != expiration + ) { + + return; + + } + + session.setLoreSlot( + -1 + ); + + session.setLoreExpiration( + 0 + ); + + RSMessageUtils.error( + player, + "Lore input timed out." + ); + + }, + 20L * 30 + ); + + player.closeInventory(); + + RSMessageUtils.info( + player, + "Enter lore for line " + + (loreSlot + 1) + + " in chat." + ); + + RSMessageUtils.info( + player, + "Type 'cancel' to abort." + ); + + RSMessageUtils.info( + player, + "Auto-Cancels after 30 seconds." + ); + + } + + private void createSubCategory( + Player player, + SubCategoryCreationSession session + ) { + + SubCategoryCreationSession subCategorySession = + SubCategoryCreationSessionManager.getSession( + player.getUniqueId() + ); + + WarehouseItem clickedItem = + ItemDAO.getItemById( + subCategorySession.getItemId() + ); + + StringBuilder loreBuilder = + new StringBuilder(); + + for (int i = 0; i < 5; i++) { + + String line = + session.getLore( + i + ); + + if (line == null) { + + line = ""; + + } + + loreBuilder.append( + line + ); + + if (i < 4) { + + loreBuilder.append( + "\n" + ); + + } + + } + + int newSubCategoryId = + CreateSubCategoryDAO.createSubCategory( + clickedItem.categoryId(), + subCategorySession.getInternalName(), + subCategorySession.getDisplayName(), + ItemStackUtils.deserialize( + clickedItem.serializedItem() + ).getType().name(), + loreBuilder.toString() + ); + + ItemPlacementDAO.cloneItemToSubCategory( + clickedItem.id(), + newSubCategoryId + ); + + ItemPlacementDAO.convertItemToSubCategoryLink( + clickedItem.id(), + newSubCategoryId, + loreBuilder.toString() + ); + + ItemsMenu.open( + player, + newSubCategoryId, + session.getDisplayName(), + 0 + ); + + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenu.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenu.java new file mode 100644 index 0000000..5651a8b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenu.java @@ -0,0 +1,196 @@ +package com.rsscripting.rswarehouse.subcategory.movetosubcategory; + +import com.rsscripting.rswarehouse.subcategory.subcategorydao.SubCategoryDAO; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class MoveToSubCategoryMenu { + + public static final String MENU_TITLE = + "Move Item To SubCategory"; + + public static void open( + Player player, + int itemId, + int page + ) { + + Inventory menu = + Bukkit.createInventory( + new MoveToSubCategoryMenuHolder( + itemId, + page + ), + 54, + Component.text( + MENU_TITLE + ).color( + NamedTextColor.BLUE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int slot = 0; slot <= 8; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + for (int slot = 45; slot <= 53; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + List categories = + SubCategoryDAO.getSubCategories(); + + List displayCategories = + new ArrayList<>(); + + for (WarehouseCategory category : categories) { + displayCategories.add( + category + ); + } + + int pageSize = 36; + + int maxPage = + Math.max( + 0, + (displayCategories.size() - 1) + / pageSize + ); + + int startIndex = + page * pageSize; + + int endIndex = + Math.min( + startIndex + pageSize, + displayCategories.size() + ); + + boolean hasPrevious = + page > 0; + + boolean hasNext = + page < maxPage; + + if (hasPrevious) { + + menu.setItem( + 0, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aPrevious Page" + ) + ); + + } + + if (hasNext) { + + menu.setItem( + 8, + RSMenuUtils.createMenuItem( + Material.ARROW, + "§aNext Page" + ) + ); + + } + + int slot = 9; + + for ( + + int i = startIndex; + + i < endIndex; + + i++ + + ) { + + WarehouseCategory category = + displayCategories.get( + i + ); + + List lore = + new ArrayList<>(); + + if ( + category.lore() != null + && + !category.lore().isBlank() + ) { + + lore.addAll( + Arrays.asList( + category.lore().split("\n") + ) + ); + + } + + ItemStack icon = + RSMenuUtils.createMenuItemWithLore( + Material.valueOf( + category.material() + ), + "§a" + category.displayName(), + lore + ); + + ItemMeta meta = + icon.getItemMeta(); + + meta.getPersistentDataContainer().set( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER, + category.id() + ); + + icon.setItemMeta( + meta + ); + + menu.setItem( + slot++, + icon + ); + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenuHolder.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenuHolder.java new file mode 100644 index 0000000..b6e4c5e --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenuHolder.java @@ -0,0 +1,41 @@ +package com.rsscripting.rswarehouse.subcategory.movetosubcategory; + +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; + +public class MoveToSubCategoryMenuHolder + extends RSMenuHolder { + + private final int itemId; + + private final int page; + + public MoveToSubCategoryMenuHolder( + int itemId, + int page + ) { + + super( + "MOVE_TO_SUBCATEGORY" + ); + + this.itemId = + itemId; + + this.page = + page; + + } + + public int getItemId() { + + return itemId; + + } + + public int getPage() { + + return page; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenuListener.java new file mode 100644 index 0000000..c2343ae --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/movetosubcategory/MoveToSubCategoryMenuListener.java @@ -0,0 +1,180 @@ +package com.rsscripting.rswarehouse.subcategory.movetosubcategory; + +import com.rsscripting.rswarehouse.category.categorymenu.CategoryDAO; +import com.rsscripting.rswarehouse.item.itemdao.ItemDAO; +import com.rsscripting.rswarehouse.placement.placementdao.ItemPlacementDAO; +import com.rsscripting.rswarehouse.item.ItemsMenu; +import com.rsscripting.rswarehouse.model.WarehouseCategory; +import com.rsscripting.rswarehouse.model.WarehouseItem; +import com.rsscripting.rswarehouse.constants.RSKeys; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +public class MoveToSubCategoryMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if (!(event.getWhoClicked() + instanceof Player player)) { + + return; + + } + + if (!(event.getInventory() + .getHolder() + instanceof MoveToSubCategoryMenuHolder holder)) { + + return; + + } + + if (!holder.getMenuId().equals( + "MOVE_TO_SUBCATEGORY" + )) { + + return; + + } + + event.setCancelled( + true + ); + + ItemStack clicked = + event.getCurrentItem(); + + if (clicked == null) { + + return; + + } + + ItemMeta meta = + clicked.getItemMeta(); + + if ( + clicked.getType() == Material.ARROW + ) { + + String name = + clicked.getItemMeta() + .getDisplayName(); + + if (name.equals("§aPrevious Page")) { + + MoveToSubCategoryMenu.open( + player, + holder.getItemId(), + holder.getPage() - 1 + ); + + return; + + } + + if (name.equals("§aNext Page")) { + + MoveToSubCategoryMenu.open( + player, + holder.getItemId(), + holder.getPage() + 1 + ); + + return; + + } + + } + + if (meta == null) { + + return; + + } + + Integer categoryId = + meta.getPersistentDataContainer().get( + RSKeys.CATEGORY_ID, + PersistentDataType.INTEGER + ); + + if (categoryId == null) { + + return; + + } + + WarehouseItem warehouseItem = + ItemDAO.getItemById( + holder.getItemId() + ); + + if ( + + warehouseItem != null + + && + + warehouseItem.subcategoryId() != null + + && + + warehouseItem.subcategoryId().equals( + categoryId + ) + + ) { + + player.sendMessage( + "§cYou cannot move a subcategory link into the subcategory it references." + ); + + MoveToSubCategoryMenu.open( + player, + holder.getItemId(), + holder.getPage() + ); + + return; + + } + + ItemPlacementDAO.moveItemToCategory( + holder.getItemId(), + categoryId + ); + + player.sendMessage( + "§aItem moved successfully." + ); + + WarehouseCategory category = + CategoryDAO.getCategoryById( + categoryId + ); + + if (category != null) { + + ItemsMenu.open( + player, + category.id(), + category.displayName(), + 0 + ); + + } + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/subcategory/subcategorydao/SubCategoryDAO.java b/src/main/java/com/rsscripting/rswarehouse/subcategory/subcategorydao/SubCategoryDAO.java new file mode 100644 index 0000000..3993ca4 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/subcategory/subcategorydao/SubCategoryDAO.java @@ -0,0 +1,323 @@ +package com.rsscripting.rswarehouse.subcategory.subcategorydao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.model.WarehouseCategory; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.List; + +public class SubCategoryDAO { + + public static List getSubCategories() { + + List categories = + new ArrayList<>(); + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT + id, + parent_category_id, + internal_name, + display_name, + material, + lore, + display_order, + page, + slot + FROM warehouse_categories + WHERE parent_category_id IS NOT NULL + ORDER BY display_order ASC + """ + ); + + ResultSet resultSet = + statement.executeQuery() + + ) { + + while (resultSet.next()) { + + categories.add( + new WarehouseCategory( + resultSet.getInt( + "id" + ), + resultSet.getObject( + "parent_category_id" + ) == null + ? null + : resultSet.getInt( + "parent_category_id" + ), + resultSet.getString( + "internal_name" + ), + resultSet.getString( + "display_name" + ), + resultSet.getString( + "material" + ), + resultSet.getString( + "lore" + ), + resultSet.getInt( + "display_order" + ), + resultSet.getInt( + "page" + ), + resultSet.getInt( + "slot" + ) + ) + ); + + } + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return categories; + + } + + public static boolean isSubCategoryEmpty( + int subCategoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT COUNT(*) + FROM warehouse_items + WHERE subcategory_id = ? + AND inventory_id IS NOT NULL + """ + ) + + ) { + + statement.setInt( + 1, + subCategoryId + ); + + try ( + ResultSet resultSet = + statement.executeQuery() + ) { + + if (resultSet.next()) { + + return resultSet.getInt(1) == 0; + + } + + } + + } + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return false; + + } + + public static void deleteSubCategory( + int subCategoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + DELETE FROM warehouse_categories + WHERE id = ? + """ + ) + + ) { + + statement.setInt( + 1, + subCategoryId + ); + + statement.executeUpdate(); + + } + + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + } + + public static boolean deleteSubCategoryAndLinkItem( + int subCategoryId, + int linkItemId + ) { + + try ( + Connection connection = DatabaseManager.getConnection() + ) { + + connection.setAutoCommit(false); + + try { + + int itemRows; + int categoryRows; + + try ( + PreparedStatement deleteItem = + connection.prepareStatement( + """ + DELETE FROM warehouse_items + WHERE id = ? + """ + ); + + PreparedStatement deleteCategory = + connection.prepareStatement( + """ + DELETE FROM warehouse_categories + WHERE id = ? + """ + ) + ) { + + deleteItem.setInt( + 1, + linkItemId + ); + + itemRows = deleteItem.executeUpdate(); + + deleteCategory.setInt( + 1, + subCategoryId + ); + + categoryRows = deleteCategory.executeUpdate(); + + } + + if ( + itemRows != 1 || + categoryRows != 1 + ) { + + connection.rollback(); + + return false; + + } + + connection.commit(); + + return true; + + } + catch (SQLException exception) { + + connection.rollback(); + + exception.printStackTrace(); + + return false; + + } + finally { + + connection.setAutoCommit(true); + + } + + } + catch (SQLException exception) { + + exception.printStackTrace(); + + return false; + + } + + } + + public static int countSubCategoryReferences( + int subCategoryId + ) { + + try ( + Connection connection = + DatabaseManager.getConnection(); + + PreparedStatement statement = + connection.prepareStatement( + """ + SELECT COUNT(*) + FROM warehouse_items + WHERE subcategory_id = ? + """ + ) + ) { + + statement.setInt( + 1, + subCategoryId + ); + + try ( + ResultSet resultSet = + statement.executeQuery() + ) { + + if (resultSet.next()) { + return resultSet.getInt(1); + } + + } + + } + catch (SQLException exception) { + + exception.printStackTrace(); + + } + + return 0; + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/updatechecker/GitHubUpdateChecker.java b/src/main/java/com/rsscripting/rswarehouse/updatechecker/GitHubUpdateChecker.java new file mode 100644 index 0000000..9be7427 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/updatechecker/GitHubUpdateChecker.java @@ -0,0 +1,186 @@ +package com.rsscripting.rswarehouse.updatechecker; + +import com.rsscripting.rswarehouse.RSWarehouse; +import com.rsscripting.rswarehouse.constants.RSConstants; +import com.rsscripting.rswarehouse.utils.VersionUtils; +import org.bukkit.Bukkit; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.URI; + +public class GitHubUpdateChecker { + + /* + |-------------------------------------------------------------------------- + | UPDATE STATUS + |-------------------------------------------------------------------------- + */ + + private static String latestVersion = null; + + private static String updateStatus = + "Checking..."; + + /* + |-------------------------------------------------------------------------- + | CHECK FOR UPDATES + |-------------------------------------------------------------------------- + */ + + public static void checkForUpdates() { + + Bukkit.getScheduler().runTaskAsynchronously( + + RSWarehouse.getInstance(), + + () -> { + + try { + + String apiURL = + "https://api.github.com/repos/" + + RSConstants.GITHUB_USER + + "/" + + RSConstants.GITHUB_REPOSITORY + + "/releases/latest"; + + HttpURLConnection connection = + (HttpURLConnection) + URI.create(apiURL) + .toURL() + .openConnection(); + + connection.setRequestMethod("GET"); + + BufferedReader reader = + new BufferedReader( + new InputStreamReader( + connection.getInputStream() + ) + ); + + StringBuilder response = + new StringBuilder(); + + String line; + + while ((line = reader.readLine()) != null) { + + response.append(line); + + } + + reader.close(); + + String json = + response.toString(); + + latestVersion = + json.split("\"tag_name\":\"")[1] + .split("\"")[0]; + + String currentVersion = + VersionUtils.getVersion(); + + /* + |-------------------------------------------------------------------------- + | UPDATE AVAILABLE + |-------------------------------------------------------------------------- + */ + + if (!latestVersion.equalsIgnoreCase( + currentVersion + )) { + + updateStatus = + "Update Available"; + + Bukkit.getConsoleSender().sendMessage( + + RSConstants.PREFIX + + "Update available! Current: " + + currentVersion + + " Latest: " + + latestVersion + + ); + + } + + /* + |-------------------------------------------------------------------------- + | UP TO DATE + |-------------------------------------------------------------------------- + */ + + else { + + updateStatus = + "Up To Date"; + + Bukkit.getConsoleSender().sendMessage( + + RSConstants.PREFIX + + "Plugin is up to date." + + ); + + } + + } + + catch (Exception exception) { + + updateStatus = + "Unable To Check"; + + Bukkit.getConsoleSender().sendMessage( + + RSConstants.PREFIX + + "Failed to check for updates." + + ); + + } + + } + + ); + + } + + /* + |-------------------------------------------------------------------------- + | GET LATEST VERSION + |-------------------------------------------------------------------------- + */ + + public static String getLatestVersion() { + + return latestVersion; + + } + + public static boolean isUpdateAvailable() { + + return "Update Available".equalsIgnoreCase( + updateStatus + ); + + } + + /* + |-------------------------------------------------------------------------- + | GET UPDATE STATUS + |-------------------------------------------------------------------------- + */ + + public static String getUpdateStatus() { + + return updateStatus; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/utils/ItemStackUtils.java b/src/main/java/com/rsscripting/rswarehouse/utils/ItemStackUtils.java new file mode 100644 index 0000000..77667f9 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/utils/ItemStackUtils.java @@ -0,0 +1,543 @@ +package com.rsscripting.rswarehouse.utils; + +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.block.ShulkerBox; +import org.bukkit.enchantments.Enchantment; +import org.bukkit.inventory.ItemFlag; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.*; +import org.bukkit.util.io.BukkitObjectInputStream; +import org.bukkit.util.io.BukkitObjectOutputStream; + +import io.papermc.paper.datacomponent.DataComponentTypes; +import io.papermc.paper.datacomponent.item.SuspiciousStewEffects; +import io.papermc.paper.potion.SuspiciousEffectEntry; +import net.kyori.adventure.text.Component; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.util.ArrayList; +import java.util.Base64; +import java.util.List; + +public class ItemStackUtils { + + public static String serialize( + ItemStack item + ) { + + ItemStack serializedItem = + item.clone(); + + serializedItem.setAmount( + 1 + ); + + try { + + ByteArrayOutputStream outputStream = + new ByteArrayOutputStream(); + + BukkitObjectOutputStream dataOutput = + new BukkitObjectOutputStream( + outputStream + ); + + dataOutput.writeObject( + serializedItem + ); + + dataOutput.close(); + + return Base64.getEncoder() + .encodeToString( + outputStream.toByteArray() + ); + + } + + catch (Exception e) { + + return null; + + } + + } + public static ItemStack deserialize( + String data + ) { + + try { + + byte[] bytes = + Base64.getDecoder() + .decode( + data + ); + + ByteArrayInputStream inputStream = + new ByteArrayInputStream( + bytes + ); + + BukkitObjectInputStream dataInput = + new BukkitObjectInputStream( + inputStream + ); + + ItemStack item = + (ItemStack) dataInput.readObject(); + + dataInput.close(); + + return item; + + } + + catch (Exception e) { + + e.printStackTrace(); + + return null; + + } + + } + + public static ItemStack removeDamage( + ItemStack item + ) { + + ItemStack copy = + item.clone(); + + if ( + copy.hasItemMeta() + && copy.getItemMeta() + instanceof Damageable damageable + ) { + + damageable.setDamage( + 0 + ); + + copy.setItemMeta( + damageable + ); + + } + + return copy; + + } + + public static ItemStack removeEnchantments( + ItemStack item + ) { + + ItemStack cleanItem = + item.clone(); + + ItemMeta meta = + cleanItem.getItemMeta(); + + if (meta == null) { + + return cleanItem; + + } + + List enchantments = + new ArrayList<>( + meta.getEnchants().keySet() + ); + + for (Enchantment enchantment : enchantments) { + + meta.removeEnchant( + enchantment + ); + + } + + if (meta.hasEnchants()) { + + Bukkit.getLogger().warning( + "Enchantments still remain after removeEnchantments(): " + + meta.getEnchants() + ); + + } + + if (meta instanceof Repairable repairable) { + + repairable.setRepairCost( + 0 + ); + + } + + cleanItem.setItemMeta( + meta + ); + + return cleanItem; + + } + + public static ItemStack removeStoredContents( + ItemStack item + ) { + + ItemStack copy = + item.clone(); + + ItemMeta meta = + copy.getItemMeta(); + + if (meta == null) { + + return copy; + + } + + /* + |-------------------------------------------------------------------------- + | SHULKER BOXES + |-------------------------------------------------------------------------- + */ + + if ( + meta instanceof BlockStateMeta blockStateMeta + ) { + + if ( + blockStateMeta.getBlockState() + instanceof ShulkerBox shulkerBox + ) { + + return new ItemStack( + item.getType() + ); + + } + + } + +/* +|-------------------------------------------------------------------------- +| BUNDLES +|-------------------------------------------------------------------------- +*/ + + if (meta instanceof BundleMeta) { + + return new ItemStack( + item.getType() + ); + + } + + return copy; + + } + + public static ItemStack createBaseItem( + ItemStack item + ) { + + ItemStack base = + removeDamage(item); + + base = + removeEnchantments(base); + + base = + removeStoredContents(base); + + base = + normalizeSpecialItems(base); + + return base; + + } + + public static ItemStack normalizeSpecialItems( + ItemStack item + ) { + + ItemStack copy = item.clone(); + + switch (copy.getType()) { + + case SUSPICIOUS_STEW -> { + + SuspiciousStewEffects stewEffects = + copy.getData(DataComponentTypes.SUSPICIOUS_STEW_EFFECTS); + + if (stewEffects == null || stewEffects.effects().isEmpty()) { + return copy; + } + + List names = new ArrayList<>(); + + for (SuspiciousEffectEntry entry : stewEffects.effects()) { + + String effectName = + entry.effect() + .key() + .value(); + + effectName = effectName.replace('_', ' '); + + StringBuilder pretty = new StringBuilder(); + + for (String word : effectName.split(" ")) { + + if (!pretty.isEmpty()) { + pretty.append(' '); + } + + pretty.append(Character.toUpperCase(word.charAt(0))); + + if (word.length() > 1) { + pretty.append(word.substring(1)); + } + } + + names.add(pretty.toString()); + } + + } + + default -> { + } + } + + return copy; + + } + + public static ItemStack createNavigationItem( + ItemStack original + ) { + + if (original == null) { + + return null; + + } + + /* + * Create a PAPER that will display another item's model. + */ + + ItemStack item = + new ItemStack( + Material.PAPER + ); + + ItemMeta originalMeta = + original.getItemMeta(); + + ItemMeta meta = + item.getItemMeta(); + + if ( + originalMeta == null + || + meta == null + ) { + + return item; + + } + + /* + * Use the vanilla model that matches the original material. + */ + + meta.setItemModel( + org.bukkit.NamespacedKey.minecraft( + original.getType() + .name() + .toLowerCase() + ) + ); + + /* + * Hide everything we don't want. + */ + + meta.addItemFlags( + ItemFlag.HIDE_ATTRIBUTES, + ItemFlag.HIDE_ARMOR_TRIM, + ItemFlag.HIDE_DESTROYS, + ItemFlag.HIDE_DYE, + ItemFlag.HIDE_ENCHANTS, + ItemFlag.HIDE_PLACED_ON, + ItemFlag.HIDE_STORED_ENCHANTS, + ItemFlag.HIDE_UNBREAKABLE, + ItemFlag.HIDE_ADDITIONAL_TOOLTIP + ); + + /* + * Preserve the display name. + */ + + if (originalMeta.hasDisplayName()) { + + meta.displayName( + originalMeta.displayName() + ); + + } + + item.setItemMeta( + meta + ); + + return item; + + } + + public static boolean hasStoredContents( + ItemStack item + ) { + + if (item == null) { + + return false; + + } + + ItemMeta meta = + item.getItemMeta(); + + if (meta == null) { + + return false; + + } + + /* + |-------------------------------------------------------------------------- + | SHULKER BOXES + |-------------------------------------------------------------------------- + */ + + if (meta instanceof BlockStateMeta blockStateMeta) { + + if (blockStateMeta.getBlockState() instanceof ShulkerBox shulkerBox) { + + return !shulkerBox + .getInventory() + .isEmpty(); + + } + + } + +/* +|-------------------------------------------------------------------------- +| BUNDLES +|-------------------------------------------------------------------------- +*/ + + if (meta instanceof BundleMeta bundleMeta) { + + return bundleMeta.hasItems(); + + } + + return false; + + } + + public static List getSpecialItemLore( + ItemStack item + ) { + + List lore = + new ArrayList<>(); + + if (item == null) { + return lore; + } + + switch (item.getType()) { + + case SUSPICIOUS_STEW -> { + + SuspiciousStewEffects stewEffects = + item.getData( + DataComponentTypes.SUSPICIOUS_STEW_EFFECTS + ); + + if ( + stewEffects == null + || + stewEffects.effects().isEmpty() + ) { + return lore; + } + + lore.add(Component.empty()); + + lore.add( + Component.text("Effects:") + .color(NamedTextColor.GOLD) + ); + + for (SuspiciousEffectEntry entry : stewEffects.effects()) { + + String effectName = + entry.effect() + .key() + .value(); + + effectName = + effectName.replace('_', ' '); + + StringBuilder pretty = + new StringBuilder(); + + for (String word : effectName.split(" ")) { + + if (!pretty.isEmpty()) { + pretty.append(' '); + } + + pretty.append( + Character.toUpperCase( + word.charAt(0) + ) + ); + + if (word.length() > 1) { + pretty.append( + word.substring(1) + ); + } + } + + lore.add( + Component.text( + "• " + pretty + ).color( + NamedTextColor.GRAY + ) + ); + } + } + + default -> { + } + } + + return lore; + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/utils/MenuAutoCenterAndPagenation.java b/src/main/java/com/rsscripting/rswarehouse/utils/MenuAutoCenterAndPagenation.java new file mode 100644 index 0000000..9b376f9 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/utils/MenuAutoCenterAndPagenation.java @@ -0,0 +1,80 @@ +package com.rsscripting.rswarehouse.utils; + +import java.util.ArrayList; +import java.util.List; + +public class MenuAutoCenterAndPagenation { + + public static List getCenteredRowSlots( + int itemsThisRow + ) { + + List rowSlots = + new ArrayList<>(); + + if (itemsThisRow % 2 == 0) { + + switch (itemsThisRow) { + + case 2 -> + rowSlots = List.of( + 3, + 5 + ); + + case 4 -> + rowSlots = List.of( + 2, + 3, + 5, + 6 + ); + + case 6 -> + rowSlots = List.of( + 1, + 2, + 3, + 5, + 6, + 7 + ); + + case 8 -> + rowSlots = List.of( + 0, + 1, + 2, + 3, + 5, + 6, + 7, + 8 + ); + + } + + } + + else { + + int startSlot = + (9 - itemsThisRow) / 2; + + for (int i = 0; + i < itemsThisRow; + i++) { + + rowSlots.add( + startSlot + i + ); + + } + + } + + return rowSlots; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/utils/RSMenuUtils.java b/src/main/java/com/rsscripting/rswarehouse/utils/RSMenuUtils.java new file mode 100644 index 0000000..93a8015 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/utils/RSMenuUtils.java @@ -0,0 +1,165 @@ +package com.rsscripting.rswarehouse.utils; + +import com.rsscripting.rswarehouse.constants.RSConstants; +import org.bukkit.Material; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import net.kyori.adventure.text.Component; + +import java.util.List; + +public class RSMenuUtils { + + /* + |-------------------------------------------------------------------------- + | CREATE FILLER PANE + |-------------------------------------------------------------------------- + */ + + public static ItemStack createFillerPane() { + + ItemStack item = + new ItemStack( + RSConstants.MENU_FILLER_MATERIAL + ); + + ItemMeta meta = + item.getItemMeta(); + + meta.setHideTooltip(true); + item.setItemMeta(meta); + + + if (meta != null) { + + meta.displayName( + Component.empty() + ); + + item.setItemMeta(meta); + + } + + return item; + + } + + /* + |-------------------------------------------------------------------------- + | CREATE MENU ITEM + |-------------------------------------------------------------------------- + */ + + public static ItemStack createMenuItem( + + Material material, + + String name + + ) { + + ItemStack item = + new ItemStack(material); + + ItemMeta meta = + item.getItemMeta(); + + if (meta != null) { + + meta.displayName( + Component.text( + name + ) + ); + + item.setItemMeta(meta); + + } + + return item; + + } + + /* +|-------------------------------------------------------------------------- +| CREATE MENU ITEM FROM ITEMSTACK +|-------------------------------------------------------------------------- +*/ + + public static ItemStack createMenuItem( + + ItemStack item, + + String name + + ) { + + ItemStack clone = + item.clone(); + + ItemMeta meta = + clone.getItemMeta(); + + if (meta != null) { + + meta.displayName( + Component.text( + name + ) + ); + + clone.setItemMeta( + meta + ); + + } + + return clone; + + } + + /* + |-------------------------------------------------------------------------- + | CREATE MENU ITEM WITH LORE + |-------------------------------------------------------------------------- + */ + + public static ItemStack createMenuItemWithLore( + + Material material, + + String name, + + List lore + + ) { + + ItemStack item = + new ItemStack(material); + + ItemMeta meta = + item.getItemMeta(); + + if (meta != null) { + + meta.displayName( + Component.text( + name + ) + ); + + meta.lore( + lore.stream() + .map(Component::text) + .toList() + ); + + item.setItemMeta(meta); + + } + + return item; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/utils/RSMessageUtils.java b/src/main/java/com/rsscripting/rswarehouse/utils/RSMessageUtils.java new file mode 100644 index 0000000..0a7d81b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/utils/RSMessageUtils.java @@ -0,0 +1,170 @@ +package com.rsscripting.rswarehouse.utils; + +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.entity.Player; + +public class RSMessageUtils { + + /* + |-------------------------------------------------------------------------- + | PREFIX + |-------------------------------------------------------------------------- + */ + + private static final Component PREFIX = + + Component.text("[") + .color(NamedTextColor.GRAY) + + .append( + Component.text( + "RS-Warehouse" + ).color( + NamedTextColor.RED + ) + ) + + .append( + Component.text("] ") + .color( + NamedTextColor.GRAY + ) + ); + + /* + |-------------------------------------------------------------------------- + | SUCCESS + |-------------------------------------------------------------------------- + */ + + public static void success( + Player player, + String message + ) { + + player.sendMessage( + + PREFIX.append( + + Component.text( + message + ).color( + NamedTextColor.GREEN + ) + + ) + + ); + + } + + /* + |-------------------------------------------------------------------------- + | WARNING + |-------------------------------------------------------------------------- + */ + + public static void warning( + Player player, + String message + ) { + + player.sendMessage( + + PREFIX.append( + + Component.text( + message + ).color( + NamedTextColor.YELLOW + ) + + ) + + ); + + } + + /* + |-------------------------------------------------------------------------- + | ERROR + |-------------------------------------------------------------------------- + */ + + public static void error( + Player player, + String message + ) { + + player.sendMessage( + + PREFIX.append( + + Component.text( + message + ).color( + NamedTextColor.RED + ) + + ) + + ); + + } + + /* + |-------------------------------------------------------------------------- + | INFO + |-------------------------------------------------------------------------- + */ + + public static void info( + Player player, + String message + ) { + + player.sendMessage( + + PREFIX.append( + + Component.text( + message + ).color( + NamedTextColor.AQUA + ) + + ) + + ); + + } + + /* + |-------------------------------------------------------------------------- + | ADMIN + |-------------------------------------------------------------------------- + */ + + public static void admin( + Player player, + String message + ) { + + player.sendMessage( + + PREFIX.append( + + Component.text( + message + ).color( + NamedTextColor.GOLD + ) + + ) + + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/utils/VersionUtils.java b/src/main/java/com/rsscripting/rswarehouse/utils/VersionUtils.java new file mode 100644 index 0000000..38e3704 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/utils/VersionUtils.java @@ -0,0 +1,20 @@ +package com.rsscripting.rswarehouse.utils; + +import com.rsscripting.rswarehouse.RSWarehouse; + +public class VersionUtils { + + /* + |-------------------------------------------------------------------------- + | GET INSTALLED VERSION + |-------------------------------------------------------------------------- + */ + + public static String getVersion() { + + return RSWarehouse.getInstance() + .getDescription() + .getVersion(); + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variants/0 b/src/main/java/com/rsscripting/rswarehouse/variants/0 new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/rsscripting/rswarehouse/variants/dao/DamagedVariantsDAO.java b/src/main/java/com/rsscripting/rswarehouse/variants/dao/DamagedVariantsDAO.java new file mode 100644 index 0000000..1a2b6e3 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variants/dao/DamagedVariantsDAO.java @@ -0,0 +1,432 @@ +package com.rsscripting.rswarehouse.variants.dao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.model.DamagedVariant; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; + +public class DamagedVariantsDAO { + + public static void createDamagedVariant( + int parentInventoryId, + ItemStack item + ) { + + Integer variantId = + findDamagedVariantId( + parentInventoryId, + item + ); + + if (variantId != null) { + + updateDamagedVariantQuantity( + variantId, + item.getAmount() + ); + + return; + + } + + String serializedItem = + ItemStackUtils.serialize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + INSERT INTO damaged_variants ( + parent_inventory_id, + serialized_item, + quantity, + lore + ) + VALUES (?, ?, ?, ?) + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + statement.setString( + 2, + serializedItem + ); + + statement.setInt( + 3, + item.getAmount() + ); + + statement.setString( + 4, + null + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + + private static Integer findDamagedVariantId( + int parentInventoryId, + ItemStack item + ) { + + String serializedItem = + ItemStackUtils.serialize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT id + FROM damaged_variants + WHERE parent_inventory_id = ? + AND serialized_item = ? + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + statement.setString( + 2, + serializedItem + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return resultSet.getInt( + "id" + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return null; + + } + + public static boolean hasDamagedVariants( + int parentInventoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT 1 + FROM damaged_variants + WHERE parent_inventory_id = ? + AND quantity > 0 + LIMIT 1 + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + return statement.executeQuery().next(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return false; + + } + + private static void updateDamagedVariantQuantity( + int variantId, + int amount + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + UPDATE damaged_variants + SET quantity = quantity + ? + WHERE id = ? + + """ + ); + + statement.setInt( + 1, + amount + ); + + statement.setInt( + 2, + variantId + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + + public static DamagedVariant getDamagedVariantById( + int variantId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT * + FROM damaged_variants + WHERE id = ? + + """ + ); + + statement.setInt( + 1, + variantId + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return new DamagedVariant( + resultSet.getInt( + "id" + ), + resultSet.getInt( + "parent_inventory_id" + ), + resultSet.getString( + "serialized_item" + ), + resultSet.getLong( + "quantity" + ), + resultSet.getString( + "lore" + ) + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return null; + + } + + + + public static void removeDamagedVariantQuantity( + int variantId, + int amount + ) { + + updateDamagedVariantQuantity( + variantId, + -amount + ); + + } + + public static void addDamagedVariantQuantity( + int variantId, + int amount + ) { + + updateDamagedVariantQuantity( + variantId, + amount + ); + + } + + public static List getDamagedVariants( + int parentInventoryId + ) { + + List variants = + new ArrayList<>(); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT * + FROM damaged_variants + WHERE parent_inventory_id = ? + AND quantity > 0 + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + ResultSet resultSet = + statement.executeQuery(); + + while (resultSet.next()) { + + variants.add( + new DamagedVariant( + resultSet.getInt( + "id" + ), + resultSet.getInt( + "parent_inventory_id" + ), + resultSet.getString( + "serialized_item" + ), + resultSet.getLong( + "quantity" + ), + resultSet.getString( + "lore" + ) + ) + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + variants.sort( + (a, b) -> { + + ItemStack itemA = + ItemStackUtils.deserialize( + a.serializedItem() + ); + + ItemStack itemB = + ItemStackUtils.deserialize( + b.serializedItem() + ); + + if ( + itemA == null + || itemB == null + ) { + + return 0; + + } + + Damageable damageA = + (Damageable) itemA.getItemMeta(); + + Damageable damageB = + (Damageable) itemB.getItemMeta(); + + return Integer.compare( + damageA.getDamage(), + damageB.getDamage() + ); + + } + ); + + return variants; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/variants/dao/EnchantedVariantsDAO.java b/src/main/java/com/rsscripting/rswarehouse/variants/dao/EnchantedVariantsDAO.java new file mode 100644 index 0000000..cbe98ab --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variants/dao/EnchantedVariantsDAO.java @@ -0,0 +1,393 @@ +package com.rsscripting.rswarehouse.variants.dao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.model.EnchantedVariant; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.inventory.ItemStack; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; + +public class EnchantedVariantsDAO { + + public static boolean hasEnchantedVariants( + int parentInventoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT 1 + FROM enchanted_variants + WHERE parent_inventory_id = ? + AND quantity > 0 + LIMIT 1 + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + return statement.executeQuery().next(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return false; + + } + + private static Integer findEnchantedVariantId( + int parentInventoryId, + ItemStack item + ) { + + String serializedItem = + ItemStackUtils.serialize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT id + FROM enchanted_variants + WHERE parent_inventory_id = ? + AND serialized_item = ? + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + statement.setString( + 2, + serializedItem + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return resultSet.getInt( + "id" + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return null; + + } + + public static void createEnchantedVariant( + int parentInventoryId, + ItemStack item + ) { + + Integer variantId = + findEnchantedVariantId( + parentInventoryId, + item + ); + + if (variantId != null) { + + updateEnchantedVariantQuantity( + variantId, + item.getAmount() + ); + + return; + + } + + String serializedItem = + ItemStackUtils.serialize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + INSERT INTO enchanted_variants ( + parent_inventory_id, + serialized_item, + quantity, + lore + ) + VALUES (?, ?, ?, ?) + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + statement.setString( + 2, + serializedItem + ); + + statement.setInt( + 3, + item.getAmount() + ); + + statement.setString( + 4, + null + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + + public static List getEnchantedVariants( + int parentInventoryId + ) { + + List variants = + new ArrayList<>(); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT * + FROM enchanted_variants + WHERE parent_inventory_id = ? + AND quantity > 0 + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + ResultSet resultSet = + statement.executeQuery(); + + while (resultSet.next()) { + + variants.add( + new EnchantedVariant( + resultSet.getInt( + "id" + ), + resultSet.getInt( + "parent_inventory_id" + ), + resultSet.getString( + "serialized_item" + ), + resultSet.getLong( + "quantity" + ), + resultSet.getString( + "lore" + ) + ) + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return variants; + + } + + private static void updateEnchantedVariantQuantity( + int variantId, + int amount + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + UPDATE enchanted_variants + SET quantity = quantity + ? + WHERE id = ? + + """ + ); + + statement.setInt( + 1, + amount + ); + + statement.setInt( + 2, + variantId + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + + public static EnchantedVariant getEnchantedVariantById( + int variantId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT * + FROM enchanted_variants + WHERE id = ? + + """ + ); + + statement.setInt( + 1, + variantId + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return new EnchantedVariant( + resultSet.getInt( + "id" + ), + resultSet.getInt( + "parent_inventory_id" + ), + resultSet.getString( + "serialized_item" + ), + resultSet.getLong( + "quantity" + ), + resultSet.getString( + "lore" + ) + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return null; + + } + + public static void addEnchantedVariantQuantity( + int variantId, + int amount + ) { + + updateEnchantedVariantQuantity( + variantId, + amount + ); + + } + + public static void removeEnchantedVariantQuantity( + int variantId, + int amount + ) { + + updateEnchantedVariantQuantity( + variantId, + -amount + ); + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/variants/dao/PartiallyFilledVariantsDAO.java b/src/main/java/com/rsscripting/rswarehouse/variants/dao/PartiallyFilledVariantsDAO.java new file mode 100644 index 0000000..4bd2684 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variants/dao/PartiallyFilledVariantsDAO.java @@ -0,0 +1,394 @@ +package com.rsscripting.rswarehouse.variants.dao; + +import com.rsscripting.rswarehouse.database.DatabaseManager; +import com.rsscripting.rswarehouse.model.PartiallyFilledVariant; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import org.bukkit.inventory.ItemStack; + +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.List; + + +public class PartiallyFilledVariantsDAO { + + public static List getPartiallyFilledVariants( + int parentInventoryId + ) { + + List variants = + new ArrayList<>(); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT * + FROM partially_filled_variants + WHERE parent_inventory_id = ? + AND quantity > 0 + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + ResultSet resultSet = + statement.executeQuery(); + + while (resultSet.next()) { + + variants.add( + new PartiallyFilledVariant( + resultSet.getInt( + "id" + ), + resultSet.getInt( + "parent_inventory_id" + ), + resultSet.getString( + "serialized_item" + ), + resultSet.getLong( + "quantity" + ), + resultSet.getString( + "lore" + ) + ) + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return variants; + + } + + public static PartiallyFilledVariant getPartiallyFilledVariantById( + int variantId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT * + FROM partially_filled_variants + WHERE id = ? + + """ + ); + + statement.setInt( + 1, + variantId + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return new PartiallyFilledVariant( + resultSet.getInt( + "id" + ), + resultSet.getInt( + "parent_inventory_id" + ), + resultSet.getString( + "serialized_item" + ), + resultSet.getLong( + "quantity" + ), + resultSet.getString( + "lore" + ) + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return null; + + } + + public static void removePartiallyFilledVariantQuantity( + int variantId, + int amount + ) { + + updatePartiallyFilledVariantQuantity( + variantId, + -amount + ); + + } + + public static void addPartiallyFilledVariantQuantity( + int variantId, + int amount + ) { + + updatePartiallyFilledVariantQuantity( + variantId, + amount + ); + + } + + private static void updatePartiallyFilledVariantQuantity( + int variantId, + int amount + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + UPDATE partially_filled_variants + SET quantity = quantity + ? + WHERE id = ? + + """ + ); + + statement.setInt( + 1, + amount + ); + + statement.setInt( + 2, + variantId + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + + private static Integer findPartiallyFilledVariantId( + int parentInventoryId, + ItemStack item + ) { + + String serializedItem = + ItemStackUtils.serialize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT id + FROM partially_filled_variants + WHERE parent_inventory_id = ? + AND serialized_item = ? + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + statement.setString( + 2, + serializedItem + ); + + ResultSet resultSet = + statement.executeQuery(); + + if (resultSet.next()) { + + return resultSet.getInt( + "id" + ); + + } + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return null; + + } + + public static void createPartiallyFilledVariant( + int parentInventoryId, + ItemStack item + ) { + + Integer variantId = + findPartiallyFilledVariantId( + parentInventoryId, + item + ); + + if (variantId != null) { + + updatePartiallyFilledVariantQuantity( + variantId, + item.getAmount() + ); + + return; + + } + + String serializedItem = + ItemStackUtils.serialize( + item + ); + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + INSERT INTO partially_filled_variants ( + parent_inventory_id, + serialized_item, + quantity, + lore + ) + VALUES (?, ?, ?, ?) + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + statement.setString( + 2, + serializedItem + ); + + statement.setInt( + 3, + item.getAmount() + ); + + statement.setString( + 4, + null + ); + + statement.executeUpdate(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + } + + public static boolean hasPartiallyFilledVariants( + int parentInventoryId + ) { + + try ( + + Connection connection = + DatabaseManager.getConnection() + + ) { + + PreparedStatement statement = + connection.prepareStatement( + """ + + SELECT 1 + FROM partially_filled_variants + WHERE parent_inventory_id = ? + AND quantity > 0 + LIMIT 1 + + """ + ); + + statement.setInt( + 1, + parentInventoryId + ); + + return statement.executeQuery().next(); + + } catch (Exception e) { + + e.printStackTrace(); + + } + + return false; + + } + +} diff --git a/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsMenu.java b/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsMenu.java new file mode 100644 index 0000000..fdb1e88 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsMenu.java @@ -0,0 +1,179 @@ +package com.rsscripting.rswarehouse.variantsdamaged; + +import com.rsscripting.rswarehouse.variants.dao.DamagedVariantsDAO; +import com.rsscripting.rswarehouse.model.DamagedVariant; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.Damageable; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.List; + +public class DamagedVariantsMenu { + + public static void open( + Player player, + int itemId, + int parentInventoryId + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "DAMAGED_VARIANTS:" + itemId + ), + 54, + Component.text( + "Damaged Variants" + ).color( + NamedTextColor.BLUE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int slot = 0; slot <= 8; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + for (int slot = 45; slot <= 53; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§a Back" + ) + ); + + List variants = + DamagedVariantsDAO.getDamagedVariants( + parentInventoryId + ); + + int slot = 9; + + for ( + DamagedVariant variant + : variants + ) { + + ItemStack item = + ItemStackUtils.deserialize( + variant.serializedItem() + ); + + if (item == null) { + + continue; + + } + + if ( + item.getItemMeta() + instanceof Damageable damageable + ) { + + ItemMeta meta = + item.getItemMeta(); + + int maxDurability = + item.getType() + .getMaxDurability(); + + int remainingDurability = + maxDurability + - damageable.getDamage(); + + List lore = + new ArrayList<>(); + + lore.add( + Component.text( + "Durability: " + + remainingDurability + + " / " + + maxDurability + ) + ); + + lore.add( + Component.text( + "Quantity: " + + String.format( + "%,d", + variant.quantity() + ) + ) + ); + + meta.lore( + lore + ); + + item.setItemMeta( + meta + ); + + } + + ItemMeta meta = + item.getItemMeta(); + + meta.getPersistentDataContainer() + .set( + RSKeys.DAMAGED_VARIANT_ID, + PersistentDataType.INTEGER, + variant.id() + ); + + item.setItemMeta( + meta + ); + + menu.setItem( + slot, + item + ); + + slot++; + + if (slot >= 45) { + + break; + + } + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsMenuListener.java new file mode 100644 index 0000000..90787d4 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsMenuListener.java @@ -0,0 +1,149 @@ +package com.rsscripting.rswarehouse.variantsdamaged; + +import com.rsscripting.rswarehouse.item.TransactionAmountMenu; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.session.VariantType; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.session.TransactionSession; + +public class DamagedVariantsMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if ( + !(event.getWhoClicked() + instanceof Player player) + ) { + + return; + + } + + if ( + !(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder) + ) { + + return; + + } + + if ( + !holder.getMenuId() + .startsWith( + "DAMAGED_VARIANTS:" + ) + ) { + + return; + + } + + event.setCancelled( + true + ); + + int itemId = + Integer.parseInt( + holder.getMenuId() + .split(":")[1] + ); + +/* +|-------------------------------------------------------------------------- +| BACK +|-------------------------------------------------------------------------- +*/ + + if (event.getSlot() == 4) { + + TransactionAmountMenu.open( + player, + itemId, + 0 + ); + + return; + + } + +/* +|-------------------------------------------------------------------------- +| DAMAGED VARIANT +|-------------------------------------------------------------------------- +*/ + + ItemStack clickedItem = + event.getCurrentItem(); + + if (clickedItem == null) { + + return; + + } + + ItemMeta meta = + clickedItem.getItemMeta(); + + if (meta == null) { + + return; + + } + + Integer damagedVariantId = + meta.getPersistentDataContainer() + .get( + RSKeys.DAMAGED_VARIANT_ID, + PersistentDataType.INTEGER + ); + + if (damagedVariantId == null) { + + return; + + } + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + TransactionSession transactionSession = + new TransactionSession(itemId); + + transactionSession.setVariantType( + VariantType.DAMAGED + ); + + transactionSession.setVariantRecordId( + damagedVariantId + ); + + session.setItemActionSession( + transactionSession + ); + + DamagedVariantsTransactionMenu.open( + player, + damagedVariantId, + 0 + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsTransactionMenu.java b/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsTransactionMenu.java new file mode 100644 index 0000000..329c887 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsTransactionMenu.java @@ -0,0 +1,321 @@ +package com.rsscripting.rswarehouse.variantsdamaged; + +import com.rsscripting.rswarehouse.variants.dao.DamagedVariantsDAO; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import com.rsscripting.rswarehouse.model.DamagedVariant; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; + +public class DamagedVariantsTransactionMenu { + + public static void open( + Player player, + int damagedVariantId, + int amount + ) { + + String title; + + if (amount > 0) { + + title = + "Deposit: " + + String.format( + "%,d", + amount + ); + + } + + else if (amount < 0) { + + title = + "Withdraw: " + + String.format( + "%,d", + Math.abs( + amount + ) + ); + + } + + else { + + title = + "Amount: 0"; + + } + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "DAMAGED_ITEM_ACTION" + ), + 27, + Component.text( + title + ).color( + NamedTextColor.BLUE + ) + ); + + /* + |-------------------------------------------------------------------------- + | FILLER + |-------------------------------------------------------------------------- + */ + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem( + i, + RSMenuUtils.createFillerPane() + ); + + } + +/* +|-------------------------------------------------------------------------- +| CENTER ITEM +|-------------------------------------------------------------------------- +*/ + + DamagedVariant damagedVariant = + DamagedVariantsDAO.getDamagedVariantById( + damagedVariantId + ); + + if (damagedVariant != null) { + + ItemStack item = + ItemStackUtils.deserialize( + damagedVariant.serializedItem() + ); + + if (item != null) { + + ItemMeta meta = + item.getItemMeta(); + + if (meta != null) { + + long playerHas = + getPlayerItemCount( + player, + item + ); + + meta.lore( + List.of( + Component.text( + "In Stock: " + + String.format( + "%,d", + damagedVariant.quantity() + ) + ).color( + NamedTextColor.LIGHT_PURPLE + ), + + Component.text( + "Player Has: " + + String.format( + "%,d", + playerHas + ) + ).color( + NamedTextColor.GREEN + ), + + Component.text( + " " + ), + + Component.text( + "Click to complete transaction." + ).color( + NamedTextColor.YELLOW + ) + ) + ); + + item.setItemMeta( + meta + ); + + } + + menu.setItem( + 13, + item + ); + + } + + } + + /* + |-------------------------------------------------------------------------- + | WITHDRAW + |-------------------------------------------------------------------------- + */ + + ItemStack subtract64 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 64" + ); + + subtract64.setAmount( + 64 + ); + + menu.setItem( + 9, + subtract64 + ); + + ItemStack subtract16 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 16" + ); + + subtract16.setAmount( + 16 + ); + + menu.setItem( + 10, + subtract16 + ); + + + ItemStack subtract1 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 1" + ); + + subtract1.setAmount( + 1 + ); + + menu.setItem( + 11, + subtract1 + ); + + /* + |-------------------------------------------------------------------------- + | DEPOSIT + |-------------------------------------------------------------------------- + */ + + ItemStack add1 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 1" + ); + + add1.setAmount( + 1 + ); + + menu.setItem( + 15, + add1 + ); + + ItemStack add16 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 16" + ); + + add16.setAmount( + 16 + ); + + menu.setItem( + 16, + add16 + ); + + ItemStack add64 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 64" + ); + + add64.setAmount( + 64 + ); + + menu.setItem( + 17, + add64 + ); + + /* + |-------------------------------------------------------------------------- + | BACK + |-------------------------------------------------------------------------- + */ + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§eReturn to main menu." + ) + ); + + player.openInventory( + menu + ); + + } + + public static long getPlayerItemCount( + Player player, + ItemStack target + ) { + + long count = 0; + + for (ItemStack item : player.getInventory().getContents()) { + + if (item == null) { + continue; + } + + if ( + item.isSimilar( + target + ) + ) { + + count += item.getAmount(); + + } + + + } + + return count; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsTransactionMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsTransactionMenuListener.java new file mode 100644 index 0000000..9bf379b --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantsdamaged/DamagedVariantsTransactionMenuListener.java @@ -0,0 +1,433 @@ +package com.rsscripting.rswarehouse.variantsdamaged; + +import com.rsscripting.rswarehouse.item.TransactionAmountMenu; +import com.rsscripting.rswarehouse.variants.dao.DamagedVariantsDAO; +import com.rsscripting.rswarehouse.autodeposit.autodepositdao.AutoDepositDAO; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.model.DamagedVariant; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.item.TransactionUtils; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.session.TransactionSession; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class DamagedVariantsTransactionMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if ( + !(event.getWhoClicked() + instanceof Player player) + ) { + + return; + + } + + if ( + !(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder) + ) { + + return; + + } + + if ( + !holder.getMenuId() + .equals( + "DAMAGED_ITEM_ACTION" + ) + ) { + + return; + + } + + event.setCancelled( + true + ); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + TransactionSession itemSession = + session.getItemActionSession(); + + if (itemSession == null) { + + return; + + } + + int amount = + itemSession.getAmount(); + + int warehouseItemId = + itemSession.getWarehouseItemId(); + + int damagedVariantId = + itemSession.getVariantRecordId(); + + DamagedVariant damagedVariant = + DamagedVariantsDAO.getDamagedVariantById( + damagedVariantId + ); + + if (damagedVariant == null) { + + return; + + } + + if (event.getSlot() == 4) { + + TransactionAmountMenu.open( + player, + warehouseItemId, + 0 + ); + + return; + } + + if (event.getSlot() == 5) { + + player.closeInventory(); + + } + + ItemStack item = + ItemStackUtils.deserialize( + damagedVariant.serializedItem() + ); + + if (item == null) { + + return; + + } + + long playerHas = + TransactionUtils.getPlayerItemCount( + player, + item + ); + + if (event.getSlot() == 13) { + + if (amount == 0) { + + return; + + } + + if (amount > 0) { + + ItemStack depositItem = + item.clone(); + + depositItem.setAmount( + 1 + ); + + if ( + removeItems( + player, + depositItem, + amount + ) + ) { + + DamagedVariantsDAO.addDamagedVariantQuantity( + damagedVariant.id(), + amount + ); + + player.sendMessage( + "§aYou have deposited " + + amount + + " items." + ); + + itemSession.setAmount( + 0 + ); + + DamagedVariantsTransactionMenu.open( + player, + damagedVariantId, + 0 + ); + + } + + return; + + } + + else { + + int withdrawAmount = + Math.abs( + amount + ); + + ItemStack withdrawItem = + item.clone(); + + withdrawItem.setAmount( + withdrawAmount + ); + + if ( + AutoDepositDAO.shouldBlockWithdrawal( + player.getUniqueId(), + withdrawItem + ) + ) { + + RSMessageUtils.error( + player, + "Disable Auto Deposit or remove this item from your filter before withdrawing it." + ); + + return; + + } + + player.getInventory() + .addItem( + withdrawItem + ); + + DamagedVariantsDAO.removeDamagedVariantQuantity( + damagedVariant.id(), + withdrawAmount + ); + + player.sendMessage( + "§aYou have withdrawn " + + withdrawAmount + + " items." + ); + + itemSession.setAmount( + 0 + ); + + DamagedVariantsTransactionMenu.open( + player, + damagedVariantId, + 0 + ); + + } + + return; + + } + + long warehouseStock = + damagedVariant.quantity(); + + int inventoryCapacity = + getAvailableCapacity( + player, + item + ); + + long maxWithdraw = + Math.min( + warehouseStock, + inventoryCapacity + ); + + switch ( + event.getSlot() + ) { + + case 9 -> + amount -= 64; + + case 10 -> + amount -= 16; + + case 11 -> + amount -= 1; + + case 15 -> + amount += 1; + + case 16 -> + amount += 16; + + case 17 -> + amount += 64; + + default -> { + + return; + + } + + } + + if (amount > playerHas) { + + amount = + (int) playerHas; + + } + + if ( + amount < -maxWithdraw + ) + { + + amount = + (int) -maxWithdraw; + + } + + itemSession.setAmount( + amount + ); + + DamagedVariantsTransactionMenu.open( + player, + damagedVariantId, + amount + ); + + } + + private boolean removeItems( + Player player, + ItemStack target, + int amount + ) { + + int remaining = + amount; + + ItemStack[] contents = + player.getInventory() + .getContents(); + + for (int slot = 0; + slot < contents.length; + slot++) { + + ItemStack item = + contents[slot]; + + if (item == null) { + + continue; + + } + + if (!item.isSimilar(target)) { + + continue; + + } + + if ( + item.getAmount() + <= remaining + ) { + + remaining -= + item.getAmount(); + + player.getInventory() + .setItem( + slot, + null + ); + + } + + else { + + item.setAmount( + item.getAmount() + - remaining + ); + + remaining = + 0; + + } + + if (remaining <= 0) { + + return true; + + } + + } + + return false; + + } + + private int getAvailableCapacity( + Player player, + ItemStack target + ) { + + int capacity = 0; + + int maxStack = + target.getMaxStackSize(); + + for ( + ItemStack item : + player.getInventory() + .getStorageContents() + ) { + + if (item == null) { + + capacity += maxStack; + + continue; + + } + + if ( + item.isSimilar( + target + ) + ) { + + capacity += + maxStack + - item.getAmount(); + + } + + } + + return capacity; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsMenu.java b/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsMenu.java new file mode 100644 index 0000000..5fa421f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsMenu.java @@ -0,0 +1,147 @@ +package com.rsscripting.rswarehouse.variantsenchanted; + +import com.rsscripting.rswarehouse.variants.dao.EnchantedVariantsDAO; +import com.rsscripting.rswarehouse.model.EnchantedVariant; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.List; + +public class EnchantedVariantsMenu { + + public static void open( + Player player, + int itemId, + int parentInventoryId + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "ENCHANTED_VARIANTS:" + itemId + ), + 54, + Component.text( + "Enchanted Variants" + ).color( + NamedTextColor.BLUE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int slot = 0; slot <= 8; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + for (int slot = 45; slot <= 53; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§a Back" + ) + ); + + List variants = + EnchantedVariantsDAO.getEnchantedVariants( + parentInventoryId + ); + + int slot = 9; + + for ( + EnchantedVariant variant + : variants + ) { + + ItemStack item = + ItemStackUtils.deserialize( + variant.serializedItem() + ); + + if (item == null) { + + continue; + + } + + ItemMeta meta = + item.getItemMeta(); + + List lore = + new ArrayList<>(); + + lore.add( + Component.text( + "Quantity: " + + String.format( + "%,d", + variant.quantity() + ) + ) + ); + + meta.lore( + lore + ); + + meta.getPersistentDataContainer() + .set( + RSKeys.ENCHANTED_VARIANT_ID, + PersistentDataType.INTEGER, + variant.id() + ); + + item.setItemMeta( + meta + ); + + menu.setItem( + slot, + item + ); + + slot++; + + if (slot >= 45) { + + break; + + } + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsMenuListener.java new file mode 100644 index 0000000..6e2bcb4 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsMenuListener.java @@ -0,0 +1,151 @@ +package com.rsscripting.rswarehouse.variantsenchanted; + +import com.rsscripting.rswarehouse.item.TransactionAmountMenu; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.session.TransactionSession; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.session.VariantType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +public class EnchantedVariantsMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if ( + !(event.getWhoClicked() + instanceof Player player) + ) { + + return; + + } + + if ( + !(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder) + ) { + + return; + + } + + if ( + !holder.getMenuId() + .startsWith( + "ENCHANTED_VARIANTS:" + ) + ) { + + return; + + } + + event.setCancelled( + true + ); + + int itemId = + Integer.parseInt( + holder.getMenuId() + .split( + ":" + )[1] + ); + +/* +|-------------------------------------------------------------------------- +| BACK +|-------------------------------------------------------------------------- +*/ + + if (event.getSlot() == 4) { + + TransactionAmountMenu.open( + player, + itemId, + 0 + ); + + return; + + } + +/* +|-------------------------------------------------------------------------- +| ENCHANTED VARIANT +|-------------------------------------------------------------------------- +*/ + + ItemStack clickedItem = + event.getCurrentItem(); + + if (clickedItem == null) { + + return; + + } + + ItemMeta meta = + clickedItem.getItemMeta(); + + if (meta == null) { + + return; + + } + + Integer enchantedVariantId = + meta.getPersistentDataContainer() + .get( + RSKeys.ENCHANTED_VARIANT_ID, + PersistentDataType.INTEGER + ); + + if (enchantedVariantId == null) { + + return; + + } + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + TransactionSession transactionSession = + new TransactionSession(itemId); + + transactionSession.setVariantType( + VariantType.ENCHANTED + ); + + transactionSession.setVariantRecordId( + enchantedVariantId + ); + + session.setItemActionSession( + transactionSession + ); + + EnchantedVariantsTransactionMenu.open( + player, + enchantedVariantId, + 0 + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsTransactionMenu.java b/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsTransactionMenu.java new file mode 100644 index 0000000..92ebe23 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsTransactionMenu.java @@ -0,0 +1,321 @@ +package com.rsscripting.rswarehouse.variantsenchanted; + +import com.rsscripting.rswarehouse.variants.dao.EnchantedVariantsDAO; +import com.rsscripting.rswarehouse.model.EnchantedVariant; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; + +public class EnchantedVariantsTransactionMenu { + + public static void open( + Player player, + int enchantedVariantId, + int amount + ) { + + String title; + + if (amount > 0) { + + title = + "Deposit: " + + String.format( + "%,d", + amount + ); + + } + + else if (amount < 0) { + + title = + "Withdraw: " + + String.format( + "%,d", + Math.abs( + amount + ) + ); + + } + + else { + + title = + "Amount: 0"; + + } + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "ENCHANTED_ITEM_ACTION" + ), + 27, + Component.text( + title + ).color( + NamedTextColor.BLUE + ) + ); + + /* + |-------------------------------------------------------------------------- + | FILLER + |-------------------------------------------------------------------------- + */ + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem( + i, + RSMenuUtils.createFillerPane() + ); + + } + +/* +|-------------------------------------------------------------------------- +| CENTER ITEM +|-------------------------------------------------------------------------- +*/ + + EnchantedVariant enchantedVariant = + EnchantedVariantsDAO.getEnchantedVariantById( + enchantedVariantId + ); + + if (enchantedVariant != null) { + + ItemStack item = + ItemStackUtils.deserialize( + enchantedVariant.serializedItem() + ); + + if (item != null) { + + ItemMeta meta = + item.getItemMeta(); + + if (meta != null) { + + long playerHas = + getPlayerItemCount( + player, + item + ); + + meta.lore( + List.of( + Component.text( + "In Stock: " + + String.format( + "%,d", + enchantedVariant.quantity() + ) + ).color( + NamedTextColor.LIGHT_PURPLE + ), + + Component.text( + "Player Has: " + + String.format( + "%,d", + playerHas + ) + ).color( + NamedTextColor.GREEN + ), + + Component.text( + " " + ), + + Component.text( + "Click to complete transaction." + ).color( + NamedTextColor.YELLOW + ) + ) + ); + + item.setItemMeta( + meta + ); + + } + + menu.setItem( + 13, + item + ); + + } + + } + + /* + |-------------------------------------------------------------------------- + | WITHDRAW + |-------------------------------------------------------------------------- + */ + + ItemStack subtract64 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 64" + ); + + subtract64.setAmount( + 64 + ); + + menu.setItem( + 9, + subtract64 + ); + + ItemStack subtract16 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 16" + ); + + subtract16.setAmount( + 16 + ); + + menu.setItem( + 10, + subtract16 + ); + + + ItemStack subtract1 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 1" + ); + + subtract1.setAmount( + 1 + ); + + menu.setItem( + 11, + subtract1 + ); + + /* + |-------------------------------------------------------------------------- + | DEPOSIT + |-------------------------------------------------------------------------- + */ + + ItemStack add1 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 1" + ); + + add1.setAmount( + 1 + ); + + menu.setItem( + 15, + add1 + ); + + ItemStack add16 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 16" + ); + + add16.setAmount( + 16 + ); + + menu.setItem( + 16, + add16 + ); + + ItemStack add64 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 64" + ); + + add64.setAmount( + 64 + ); + + menu.setItem( + 17, + add64 + ); + + /* + |-------------------------------------------------------------------------- + | BACK + |-------------------------------------------------------------------------- + */ + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§eReturn to main menu." + ) + ); + + player.openInventory( + menu + ); + + } + + public static long getPlayerItemCount( + Player player, + ItemStack target + ) { + + long count = 0; + + for (ItemStack item : player.getInventory().getContents()) { + + if (item == null) { + continue; + } + + if ( + item.isSimilar( + target + ) + ) { + + count += item.getAmount(); + + } + + + } + + return count; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsTransactionMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsTransactionMenuListener.java new file mode 100644 index 0000000..cbee146 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantsenchanted/EnchantedVariantsTransactionMenuListener.java @@ -0,0 +1,433 @@ +package com.rsscripting.rswarehouse.variantsenchanted; + +import com.rsscripting.rswarehouse.item.TransactionAmountMenu; +import com.rsscripting.rswarehouse.variants.dao.EnchantedVariantsDAO; +import com.rsscripting.rswarehouse.autodeposit.autodepositdao.AutoDepositDAO; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.model.EnchantedVariant; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.item.TransactionUtils; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.session.TransactionSession; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class EnchantedVariantsTransactionMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if ( + !(event.getWhoClicked() + instanceof Player player) + ) { + + return; + + } + + if ( + !(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder) + ) { + + return; + + } + + if ( + !holder.getMenuId() + .equals( + "ENCHANTED_ITEM_ACTION" + ) + ) { + + return; + + } + + event.setCancelled( + true + ); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + TransactionSession itemSession = + session.getItemActionSession(); + + if (itemSession == null) { + + return; + + } + + int amount = + itemSession.getAmount(); + + int warehouseItemId = + itemSession.getWarehouseItemId(); + + int enchantedVariantId = + itemSession.getVariantRecordId(); + + EnchantedVariant enchantedVariant = + EnchantedVariantsDAO.getEnchantedVariantById( + enchantedVariantId + ); + + if (enchantedVariant == null) { + + return; + + } + + if (event.getSlot() == 4) { + + TransactionAmountMenu.open( + player, + warehouseItemId, + 0 + ); + + return; + } + + if (event.getSlot() == 5) { + + player.closeInventory(); + + } + + ItemStack item = + ItemStackUtils.deserialize( + enchantedVariant.serializedItem() + ); + + if (item == null) { + + return; + + } + + long playerHas = + TransactionUtils.getPlayerItemCount( + player, + item + ); + + if (event.getSlot() == 13) { + + if (amount == 0) { + + return; + + } + + if (amount > 0) { + + ItemStack depositItem = + item.clone(); + + depositItem.setAmount( + 1 + ); + + if ( + removeItems( + player, + depositItem, + amount + ) + ) { + + EnchantedVariantsDAO.addEnchantedVariantQuantity( + enchantedVariant.id(), + amount + ); + + player.sendMessage( + "§aYou have deposited " + + amount + + " items." + ); + + itemSession.setAmount( + 0 + ); + + EnchantedVariantsTransactionMenu.open( + player, + enchantedVariantId, + amount + ); + + } + + return; + + } + + else { + + int withdrawAmount = + Math.abs( + amount + ); + + ItemStack withdrawItem = + item.clone(); + + withdrawItem.setAmount( + withdrawAmount + ); + + if ( + AutoDepositDAO.shouldBlockWithdrawal( + player.getUniqueId(), + withdrawItem + ) + ) { + + RSMessageUtils.error( + player, + "Disable Auto Deposit or remove this item from your filter before withdrawing it." + ); + + return; + + } + + player.getInventory() + .addItem( + withdrawItem + ); + + EnchantedVariantsDAO.removeEnchantedVariantQuantity( + enchantedVariant.id(), + withdrawAmount + ); + + player.sendMessage( + "§aYou have withdrawn " + + withdrawAmount + + " items." + ); + + itemSession.setAmount( + 0 + ); + + EnchantedVariantsTransactionMenu.open( + player, + enchantedVariantId, + 0 + ); + + } + + return; + + } + + long warehouseStock = + enchantedVariant.quantity(); + + int inventoryCapacity = + getAvailableCapacity( + player, + item + ); + + long maxWithdraw = + Math.min( + warehouseStock, + inventoryCapacity + ); + + switch ( + event.getSlot() + ) { + + case 9 -> + amount -= 64; + + case 10 -> + amount -= 16; + + case 11 -> + amount -= 1; + + case 15 -> + amount += 1; + + case 16 -> + amount += 16; + + case 17 -> + amount += 64; + + default -> { + + return; + + } + + } + + if (amount > playerHas) { + + amount = + (int) playerHas; + + } + + if ( + amount < -maxWithdraw + ) + { + + amount = + (int) -maxWithdraw; + + } + + itemSession.setAmount( + amount + ); + + EnchantedVariantsTransactionMenu.open( + player, + warehouseItemId, + 0 + ); + + } + + private boolean removeItems( + Player player, + ItemStack target, + int amount + ) { + + int remaining = + amount; + + ItemStack[] contents = + player.getInventory() + .getContents(); + + for (int slot = 0; + slot < contents.length; + slot++) { + + ItemStack item = + contents[slot]; + + if (item == null) { + + continue; + + } + + if (!item.isSimilar(target)) { + + continue; + + } + + if ( + item.getAmount() + <= remaining + ) { + + remaining -= + item.getAmount(); + + player.getInventory() + .setItem( + slot, + null + ); + + } + + else { + + item.setAmount( + item.getAmount() + - remaining + ); + + remaining = + 0; + + } + + if (remaining <= 0) { + + return true; + + } + + } + + return false; + + } + + private int getAvailableCapacity( + Player player, + ItemStack target + ) { + + int capacity = 0; + + int maxStack = + target.getMaxStackSize(); + + for ( + ItemStack item : + player.getInventory() + .getStorageContents() + ) { + + if (item == null) { + + capacity += maxStack; + + continue; + + } + + if ( + item.isSimilar( + target + ) + ) { + + capacity += + maxStack + - item.getAmount(); + + } + + } + + return capacity; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsMenu.java b/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsMenu.java new file mode 100644 index 0000000..8906be3 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsMenu.java @@ -0,0 +1,147 @@ +package com.rsscripting.rswarehouse.variantspartiallyfilled; + +import com.rsscripting.rswarehouse.variants.dao.PartiallyFilledVariantsDAO; +import com.rsscripting.rswarehouse.model.PartiallyFilledVariant; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +import java.util.ArrayList; +import java.util.List; + +public class PartiallyFilledVariantsMenu { + + public static void open( + Player player, + int itemId, + int parentInventoryId + ) { + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "PARTIALLY_FILLED_VARIANTS:" + itemId + ), + 54, + Component.text( + "Partially Filled Variants" + ).color( + NamedTextColor.BLUE + ) + ); + + ItemStack filler = + RSMenuUtils.createFillerPane(); + + for (int slot = 0; slot <= 8; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + for (int slot = 45; slot <= 53; slot++) { + + menu.setItem( + slot, + filler + ); + + } + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§a Back" + ) + ); + + List variants = + PartiallyFilledVariantsDAO.getPartiallyFilledVariants( + parentInventoryId + ); + + int slot = 9; + + for ( + PartiallyFilledVariant variant + : variants + ) { + + ItemStack item = + ItemStackUtils.deserialize( + variant.serializedItem() + ); + + if (item == null) { + + continue; + + } + + ItemMeta meta = + item.getItemMeta(); + + List lore = + new ArrayList<>(); + + lore.add( + Component.text( + "Quantity: " + + String.format( + "%,d", + variant.quantity() + ) + ) + ); + + meta.lore( + lore + ); + + meta.getPersistentDataContainer() + .set( + RSKeys.PARTIALLY_FILLED_VARIANT_ID, + PersistentDataType.INTEGER, + variant.id() + ); + + item.setItemMeta( + meta + ); + + menu.setItem( + slot, + item + ); + + slot++; + + if (slot >= 45) { + + break; + + } + + } + + player.openInventory( + menu + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsMenuListener.java new file mode 100644 index 0000000..ec21518 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsMenuListener.java @@ -0,0 +1,150 @@ +package com.rsscripting.rswarehouse.variantspartiallyfilled; + +import com.rsscripting.rswarehouse.item.TransactionAmountMenu; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.session.TransactionSession; +import com.rsscripting.rswarehouse.constants.RSKeys; +import com.rsscripting.rswarehouse.session.VariantType; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; +import org.bukkit.persistence.PersistentDataType; + +public class PartiallyFilledVariantsMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if ( + !(event.getWhoClicked() + instanceof Player player) + ) { + + return; + + } + + if ( + !(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder) + ) { + + return; + + } + + if ( + !holder.getMenuId() + .startsWith( + "PARTIALLY_FILLED_VARIANTS:" + ) + ) { + + return; + + } + + event.setCancelled( + true + ); + + int itemId = + Integer.parseInt( + holder.getMenuId() + .split( + ":" + )[1] + ); + +/* +|-------------------------------------------------------------------------- +| BACK +|-------------------------------------------------------------------------- +*/ + + if (event.getSlot() == 4) { + + TransactionAmountMenu.open( + player, + itemId, + 0 + ); + + return; + } + +/* +|-------------------------------------------------------------------------- +| ENCHANTED VARIANT +|-------------------------------------------------------------------------- +*/ + + ItemStack clickedItem = + event.getCurrentItem(); + + if (clickedItem == null) { + + return; + + } + + ItemMeta meta = + clickedItem.getItemMeta(); + + if (meta == null) { + + return; + + } + + Integer partiallyFilledVariantId = + meta.getPersistentDataContainer() + .get( + RSKeys.PARTIALLY_FILLED_VARIANT_ID, + PersistentDataType.INTEGER + ); + + if (partiallyFilledVariantId == null) { + + return; + + } + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + TransactionSession transactionSession = + new TransactionSession(itemId); + + transactionSession.setVariantType( + VariantType.PARTIAL + ); + + transactionSession.setVariantRecordId( + partiallyFilledVariantId + ); + + session.setItemActionSession( + transactionSession + ); + + PartiallyFilledVariantsTransactionMenu.open( + player, + partiallyFilledVariantId, + 0 + ); + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsTransactionMenu.java b/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsTransactionMenu.java new file mode 100644 index 0000000..b733e8f --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsTransactionMenu.java @@ -0,0 +1,321 @@ +package com.rsscripting.rswarehouse.variantspartiallyfilled; + +import com.rsscripting.rswarehouse.variants.dao.PartiallyFilledVariantsDAO; +import com.rsscripting.rswarehouse.model.PartiallyFilledVariant; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.utils.RSMenuUtils; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.format.NamedTextColor; +import org.bukkit.Bukkit; +import org.bukkit.Material; +import org.bukkit.entity.Player; +import org.bukkit.inventory.Inventory; +import org.bukkit.inventory.ItemStack; +import org.bukkit.inventory.meta.ItemMeta; + +import java.util.List; + +public class PartiallyFilledVariantsTransactionMenu { + + public static void open( + Player player, + int partiallyFilledVariantId, + int amount + ) { + + String title; + + if (amount > 0) { + + title = + "Deposit: " + + String.format( + "%,d", + amount + ); + + } + + else if (amount < 0) { + + title = + "Withdraw: " + + String.format( + "%,d", + Math.abs( + amount + ) + ); + + } + + else { + + title = + "Amount: 0"; + + } + + Inventory menu = + Bukkit.createInventory( + new RSMenuHolder( + "PARTIALLY_FILLED_ITEM_ACTION" + ), + 27, + Component.text( + title + ).color( + NamedTextColor.BLUE + ) + ); + + /* + |-------------------------------------------------------------------------- + | FILLER + |-------------------------------------------------------------------------- + */ + + for (int i = 0; i < menu.getSize(); i++) { + + menu.setItem( + i, + RSMenuUtils.createFillerPane() + ); + + } + +/* +|-------------------------------------------------------------------------- +| CENTER ITEM +|-------------------------------------------------------------------------- +*/ + + PartiallyFilledVariant partiallyFilledVariant = + PartiallyFilledVariantsDAO.getPartiallyFilledVariantById( + partiallyFilledVariantId + ); + + if (partiallyFilledVariant != null) { + + ItemStack item = + ItemStackUtils.deserialize( + partiallyFilledVariant.serializedItem() + ); + + if (item != null) { + + ItemMeta meta = + item.getItemMeta(); + + if (meta != null) { + + long playerHas = + getPlayerItemCount( + player, + item + ); + + meta.lore( + List.of( + Component.text( + "In Stock: " + + String.format( + "%,d", + partiallyFilledVariant.quantity() + ) + ).color( + NamedTextColor.LIGHT_PURPLE + ), + + Component.text( + "Player Has: " + + String.format( + "%,d", + playerHas + ) + ).color( + NamedTextColor.GREEN + ), + + Component.text( + " " + ), + + Component.text( + "Click to complete transaction." + ).color( + NamedTextColor.YELLOW + ) + ) + ); + + item.setItemMeta( + meta + ); + + } + + menu.setItem( + 13, + item + ); + + } + + } + + /* + |-------------------------------------------------------------------------- + | WITHDRAW + |-------------------------------------------------------------------------- + */ + + ItemStack subtract64 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 64" + ); + + subtract64.setAmount( + 64 + ); + + menu.setItem( + 9, + subtract64 + ); + + ItemStack subtract16 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 16" + ); + + subtract16.setAmount( + 16 + ); + + menu.setItem( + 10, + subtract16 + ); + + + ItemStack subtract1 = + RSMenuUtils.createMenuItem( + Material.RED_WOOL, + "§cSubtract 1" + ); + + subtract1.setAmount( + 1 + ); + + menu.setItem( + 11, + subtract1 + ); + + /* + |-------------------------------------------------------------------------- + | DEPOSIT + |-------------------------------------------------------------------------- + */ + + ItemStack add1 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 1" + ); + + add1.setAmount( + 1 + ); + + menu.setItem( + 15, + add1 + ); + + ItemStack add16 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 16" + ); + + add16.setAmount( + 16 + ); + + menu.setItem( + 16, + add16 + ); + + ItemStack add64 = + RSMenuUtils.createMenuItem( + Material.GREEN_WOOL, + "§cAdd 64" + ); + + add64.setAmount( + 64 + ); + + menu.setItem( + 17, + add64 + ); + + /* + |-------------------------------------------------------------------------- + | BACK + |-------------------------------------------------------------------------- + */ + + menu.setItem( + 4, + RSMenuUtils.createMenuItem( + Material.OAK_DOOR, + "§eReturn to main menu." + ) + ); + + player.openInventory( + menu + ); + + } + + public static long getPlayerItemCount( + Player player, + ItemStack target + ) { + + long count = 0; + + for (ItemStack item : player.getInventory().getContents()) { + + if (item == null) { + continue; + } + + if ( + item.isSimilar( + target + ) + ) { + + count += item.getAmount(); + + } + + + } + + return count; + + } + +} \ No newline at end of file diff --git a/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsTransactionMenuListener.java b/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsTransactionMenuListener.java new file mode 100644 index 0000000..a2d96d1 --- /dev/null +++ b/src/main/java/com/rsscripting/rswarehouse/variantspartiallyfilled/PartiallyFilledVariantsTransactionMenuListener.java @@ -0,0 +1,433 @@ +package com.rsscripting.rswarehouse.variantspartiallyfilled; + +import com.rsscripting.rswarehouse.item.TransactionAmountMenu; +import com.rsscripting.rswarehouse.variants.dao.PartiallyFilledVariantsDAO; +import com.rsscripting.rswarehouse.autodeposit.autodepositdao.AutoDepositDAO; +import com.rsscripting.rswarehouse.category.categorymenu.CategoryMenu; +import com.rsscripting.rswarehouse.model.PartiallyFilledVariant; +import com.rsscripting.rswarehouse.menuholder.RSMenuHolder; +import com.rsscripting.rswarehouse.item.TransactionUtils; +import com.rsscripting.rswarehouse.session.GuiSession; +import com.rsscripting.rswarehouse.session.GuiSessionManager; +import com.rsscripting.rswarehouse.session.TransactionSession; +import com.rsscripting.rswarehouse.utils.ItemStackUtils; +import com.rsscripting.rswarehouse.utils.RSMessageUtils; +import org.bukkit.entity.Player; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.inventory.InventoryClickEvent; +import org.bukkit.inventory.ItemStack; + +public class PartiallyFilledVariantsTransactionMenuListener + implements Listener { + + @EventHandler + public void onInventoryClick( + InventoryClickEvent event + ) { + + if ( + !(event.getWhoClicked() + instanceof Player player) + ) { + + return; + + } + + if ( + !(event.getInventory() + .getHolder() + instanceof RSMenuHolder holder) + ) { + + return; + + } + + if ( + !holder.getMenuId() + .equals( + "PARTIALLY_FILLED_ITEM_ACTION" + ) + ) { + + return; + + } + + event.setCancelled( + true + ); + + GuiSession session = + GuiSessionManager.getSession( + player + ); + + TransactionSession itemSession = + session.getItemActionSession(); + + if (itemSession == null) { + + return; + + } + + int amount = + itemSession.getAmount(); + + int warehouseItemId = + itemSession.getWarehouseItemId(); + + int partiallyFilledVariantId = + itemSession.getVariantRecordId(); + + PartiallyFilledVariant partiallyFilledVariant = + PartiallyFilledVariantsDAO.getPartiallyFilledVariantById( + partiallyFilledVariantId + ); + + if (partiallyFilledVariant == null) { + + return; + + } + + if (event.getSlot() == 4) { + + TransactionAmountMenu.open( + player, + warehouseItemId, + 0 + ); + + return; + } + + if (event.getSlot() == 5) { + + player.closeInventory(); + + } + + ItemStack item = + ItemStackUtils.deserialize( + partiallyFilledVariant.serializedItem() + ); + + if (item == null) { + + return; + + } + + long playerHas = + TransactionUtils.getPlayerItemCount( + player, + item + ); + + if (event.getSlot() == 13) { + + if (amount == 0) { + + return; + + } + + if (amount > 0) { + + ItemStack depositItem = + item.clone(); + + depositItem.setAmount( + 1 + ); + + if ( + removeItems( + player, + depositItem, + amount + ) + ) { + + PartiallyFilledVariantsDAO.addPartiallyFilledVariantQuantity( + partiallyFilledVariant.id(), + amount + ); + + player.sendMessage( + "§aYou have deposited " + + amount + + " items." + ); + + itemSession.setAmount( + 0 + ); + + PartiallyFilledVariantsTransactionMenu.open( + player, + partiallyFilledVariantId, + 0 + ); + + } + + return; + + } + + else { + + int withdrawAmount = + Math.abs( + amount + ); + + ItemStack withdrawItem = + item.clone(); + + withdrawItem.setAmount( + withdrawAmount + ); + + if ( + AutoDepositDAO.shouldBlockWithdrawal( + player.getUniqueId(), + withdrawItem + ) + ) { + + RSMessageUtils.error( + player, + "Disable Auto Deposit or remove this item from your filter before withdrawing it." + ); + + return; + + } + + player.getInventory() + .addItem( + withdrawItem + ); + + PartiallyFilledVariantsDAO.removePartiallyFilledVariantQuantity( + partiallyFilledVariant.id(), + withdrawAmount + ); + + player.sendMessage( + "§aYou have withdrawn " + + withdrawAmount + + " items." + ); + + itemSession.setAmount( + 0 + ); + + PartiallyFilledVariantsTransactionMenu.open( + player, + partiallyFilledVariantId, + 0 + ); + + } + + return; + + } + + long warehouseStock = + partiallyFilledVariant.quantity(); + + int inventoryCapacity = + getAvailableCapacity( + player, + item + ); + + long maxWithdraw = + Math.min( + warehouseStock, + inventoryCapacity + ); + + switch ( + event.getSlot() + ) { + + case 9 -> + amount -= 64; + + case 10 -> + amount -= 16; + + case 11 -> + amount -= 1; + + case 15 -> + amount += 1; + + case 16 -> + amount += 16; + + case 17 -> + amount += 64; + + default -> { + + return; + + } + + } + + if (amount > playerHas) { + + amount = + (int) playerHas; + + } + + if ( + amount < -maxWithdraw + ) + { + + amount = + (int) -maxWithdraw; + + } + + itemSession.setAmount( + amount + ); + + PartiallyFilledVariantsTransactionMenu.open( + player, + partiallyFilledVariantId, + amount + ); + + } + + private boolean removeItems( + Player player, + ItemStack target, + int amount + ) { + + int remaining = + amount; + + ItemStack[] contents = + player.getInventory() + .getContents(); + + for (int slot = 0; + slot < contents.length; + slot++) { + + ItemStack item = + contents[slot]; + + if (item == null) { + + continue; + + } + + if (!item.isSimilar(target)) { + + continue; + + } + + if ( + item.getAmount() + <= remaining + ) { + + remaining -= + item.getAmount(); + + player.getInventory() + .setItem( + slot, + null + ); + + } + + else { + + item.setAmount( + item.getAmount() + - remaining + ); + + remaining = + 0; + + } + + if (remaining <= 0) { + + return true; + + } + + } + + return false; + + } + + private int getAvailableCapacity( + Player player, + ItemStack target + ) { + + int capacity = 0; + + int maxStack = + target.getMaxStackSize(); + + for ( + ItemStack item : + player.getInventory() + .getStorageContents() + ) { + + if (item == null) { + + capacity += maxStack; + + continue; + + } + + if ( + item.isSimilar( + target + ) + ) { + + capacity += + maxStack + - item.getAmount(); + + } + + } + + return capacity; + + } + +} \ No newline at end of file diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml new file mode 100644 index 0000000..0fea1d7 --- /dev/null +++ b/src/main/resources/config.yml @@ -0,0 +1,43 @@ +# +# RS-Warehouse +# + +display: + # Display when item was first deposited + # to database and what date it happened. + show-discovery-information: true + +############################################ +# Automatic-Chest scan and process settings. +############################################ + +chest-auto-processing: + enabled: true + interval-seconds: 30 + + ############################################ + # Item Creation. Wether to allow + # automatic creation when items aren't in + # databse. + ############################################ + + # Allow item to be added to Uncategorized + # if item is not currently in warehouse. +allow-uncategorized-item-creation: true + + # Allow damaged items to be added to + # damaged variant menu of base items. +allow-damaged-item-creation: true + + +####################################### +# Chest close processing +####################################### + +chest-close-processing: + + # Process warehouse chests immediately + # when a player closes them. + enabled: true + + diff --git a/src/main/resources/database.db b/src/main/resources/database.db new file mode 100644 index 0000000000000000000000000000000000000000..22d5158d50823f554d8d9f2f03455c167db7a144 GIT binary patch literal 2097152 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 F{{w917AXJ# literal 0 HcmV?d00001 diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..5b0caae --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,25 @@ +name: RS-Warehouse +version: ${project.version} +main: com.rsscripting.rswarehouse.RSWarehouse +api-version: '1.21' + +author: RSScripting +description: RS Warehouse + +commands: + rswarehouse: + description: Main plugin command + usage: /rswh + + shop: + description: Opens the Shop + usage: /shop + +permissions: + rswarehouse.admin: + description: Admin access + default: op + + rswarehouse.bypass: + description: Bypass ownership protection + default: op \ No newline at end of file