Releases: QuickShop-Community/QuickShop-Hikari
6.2.0.11
6.2.0.11
Major Changes
- Removed Spigot Platform Modules, and stopped loading QS if Spigot is detected. This will mean that unless the protocol changes that we use for display items, QS won't need updated for each version.
- Revamped Economy Code Completely
- New classes for all economy-related systems
- Any economy-related or benefits-related events are incompatible with previous versions.
- Added sign layout customizations per-type allowing you to change how lines are configured, an empty string('') will leave an empty line for that line of the sign.
#The layout of signs for shops.
layout:
#The layout of BUYING shops.
BUYING:
line1: "header"
line2: "trading"
line3: "item"
line4: "price"
#The layout of FROZEN shops.
FROZEN:
line1: "header"
line2: "trading"
line3: "item"
line4: "price"
#The layout of SELLING shops.
SELLING:
line1: "header"
line2: "trading"
line3: "item"
line4: "price"
- Add wildcard support for item blacklist patterns(thanks to bennycallanan)
-
Added support for wildcard patterns in the item blacklist configuration, allowing users to block entire categories of items with simple patterns.
-
Features
- Wildcard patterns like *_AXE and *_SPAWN_EGG now work in blacklist configuration
- Supports * for any characters and ? for single character matching
- Case-insensitive pattern matching
-
- Overhauled GUI system(thanks to Yusakidev)
- Implemented gui.yml configuration file for customizing the GUI.
- Implemented better filtering for qs browse
- Implement GUI system to be more stable, and less error prone.
- Added gui.yml for fully configurable GUI layouts and text
- Browse menu: search, sort (price/name/stock), and filter (all/buying/selling/in-stock)
- Staff menu: search functionality for player/staff selection
- Grouped item pages for better shop browsing
- Refactored all menu pages to use configurable display/lore
- Added worldedit compat to QS internally as it's widely used.
- Revamped the taxation system to be more flexible and easier to configure.
- introduced a new progressive tax system that allows you to tax based on the balance of players.(suggested by YuanYuanOwO)
- introduced the ability to tax the player interacting with the shop, the owner, or both
- all tax-related configurations have been moved under the shop-tax section of the config. this may require reconfiguration of your tax settings.
- added a new ShopEnhancedTaxEvent, deprecated the old ShopTaxEvent.
- Added a new TaxManager, and TaxProvider interfaces, this allows for custom tax providers to be added by addons/third-party developers.
Addons/Compats Changes
- Added UltimateClaims compat
- Added SimpleClaimSystem compat
- Added Quests by Pika addon
- Added BetonQuest addon
- Added Pl3xMap addon
- MatcherPlus Compat Improvements
- Added support for CrazyCrates
- Added support for ExcellentCrates
- Added support for SilkSpawners.
- WorldGuard Compat Improvements(Thanks to golovin12)
- Added clear permission handling:
- Region owners and members automatically have permission to create and trade in their own regions.
- Other players must have the appropriate WorldGuard flags enabled (quickshophikari-create, quickshophikari-trade) to interact with shops.
- If a shop is located outside any region, default QuickShop behavior applies (no extra restrictions)
- Added clear permission handling:
- Added colored markers based on shop state for bluemap(thanks to YusakiDev)
- Updated dynmap/towny addons to use the new ShopTypeEnhancedEvent instead of ShopTypeEvent.
- Removed worldedit compat, it's now included in the main plugin.
- Added support for global flags to the worldguard compat.
Internals/Developer APIs
- Removed several deprecated methods and classes.
- Revamped the interaction manager. It is now more flexible and allows external additions
- This involves two classes InteractionBehavior and InteractionType.
- InteractionType details the type of interaction such as: STANDING_LEFT_CLICK_SIGN, STANDING_LEFT_CLICK_SHOP
- InteractionBehavior outlines a behavior for an InteractionType such as CONTROL_PANEL and TRADE_UI
- Added UserLimitCalculationEvent, which allows for custom limits to be applied to users.
- This is useful for limiting the number of shops a user can have, or adding on to the existing limits provided by the ranks system without needing to implement a new RankLimiter.
- Added a new ShopLayoutProvider interface, and default implementation.
- This allows for custom layouts to be used for shops, allowing for more customization.
- This also allows for developers to override the default layout provider and create their own implementation.
- How to make your own?
- Implement the classes you would like to then register with the InteractionManager:
-
InteractionManager manager = QuickShop.getInstance().getInteractionManager(); manager.interaction(new MyTradeInteraction()); manager.behavior(new MyTradeBehavior());
- Replaced some Apache Commons calls that could be easily replaced with built-in java methods, reduces some calls by ~ 1100ms/method call
- Deprecated the ShopType enum, and the ShopTypeEvent. These are replaced with the new IShopType interface and implementing classes.
- The new event is ShopTypeEnhancedEvent.
- This allows for third-party addons to add their own shop types, and simplifies code checks for translations.
- Updated config system to use Boosted-yaml
- this allows for auto-updating of config files without complex update scripts
- this also allows for the config system to not be minecraft-dependent.
- Replaced logical PaperLib calls with native PaperAPI calls.
Minor Changes
- Bump Java version up to 21
- Added shop.display-allow-enchants to enable/disable enchantments for display items on shops.
- Added workaround for packetevents not supporting custom enchants on itemstacks for virtual display items.
- Using locale translations for shop-type in mode toggle icon(thanks to ExyiN)
- Bumped Residence version for the compat(thanks to YuanYuanOwO)
- add world whitelist support(thanks to wling-art)
- added /qs database save command, which saves all currently dirty-marked shops to the database.
- Split up interactions _SHOPBLOCK into _SHOPBLOCK and _CONTAINER.
- _SHOPBLOCK relates to shops, where _CONTAINER relates to shop-valid containers that are not currently shops.
- Added inventory as an option for command panel, this is useful for adding a secondary option for players to open a shop's inventory.
- Moved crowdin arguments from system properties to config.yml
- crowdin-host
- use-crowdin-ota
Fixes
- Fixes issue with item price restrictions(thanks to maxcom1)
- Fixes issue with 1.20.x protocol lib displays(thanks to YuanYuanOwO)
- Fixes issue when no item is in hand for itemdebug(thanks to YuanYuanOwO)
- Fixes issue with dominion addon(thanks to YuanYuanOwO)
- Add a simple check to avoid this. If it is not own shop, reject limit request directly.(Thanks to YuanYuanOwO)
- Fix NPE by not setting tax for price in TransactionBuilder(thanks to maxcom1)
- Fixes /quickshop suggestprice to differentiate between buy/sell shops. (Thanks to MidSpike)
- PacketEvents ClassNotFoundException with ProtocolLib(thanks to wling-art)
- Reallocate block state access to region thread for shop creation(thanks to r00tbeerman)
- resolve SLF4J StaticLoggerBinder loading error(thanks to wling-art)
- sign hijacking issue by validating sign facing direction(thanks to wling-art)
- Performance improvements for QuickShop disabling to prevent potential freezes.
- Fixed issue with 1.20.4 packetevents virtual displays not staying put.
- Fixes critical issue in GriefPrevention compatibility plugin.
- Fixes issue with shop owner not getting money when benefits active.
- Fixes for lands addon on folia, Use regionThread for Folia compatibility(thanks to YusakiDev)
- Fixes for TRADE_DIRECT on stacking shops
- Fixes issue for protocollib 5.4.0 with undocumented packet changes.
- Fixes issue where item stacks could be used on creation above the max stack size.
- Fixes issue with BukkitAudiences-related crashes on 1.21.11.
- Fix issue with shop deletion when getting too impatient.
- Fix the permission check issue when a shop owned by a non-owner is transferred to someone else. (thanks to YuanYuanOwO)
- Fix ui with supertool (thanks to YuanYuanOwO)
- Fix issue with logs generating outside debug mode.
- Fix issue with /qs find.
- Fix configuration loading timing.
- Fix configuration loading/creation warning message language.
- Fix command description language key mismatch(thanks to wling-art)
- Fix qs clean command on folia(thanks to wling-art)
- Fix per-player-shop-sign on folia(thanks to wling-art)
- Fix potential recursive deadlock in virtual display packet sending(thanks to wling-art)
- Fix configuration loading/creation warning message language.
- Fix issue with /qs browse and ShopItemOnly addon not behaving properly together on folia.
- Fix issue with PLAN using outdated APIs.
- Fix issue with /qs clean on folia.(thanks to wling-art)
- Fix issue with /qs cleanghost on folia(thanks to wling-art)
- More thread safety fixes for shops on folia.(thanks to wling-art)
- Fix owner payment calculations with benefits(thanks to wling-art)
6.2.0.10
6.2.0.10
Major Changes
- Added support for 1.21.6 for paper(spigot has not been updated as we look to deprecate spigot support, nag the spigot developers about modernizing their API)
- Added support for 1.21.7 for paper(spigot has not been updated as we look to deprecate spigot support, nag the spigot developers about modernizing their API)
- Added support for 1.21.8 for paper(spigot has not been updated as we look to deprecate spigot support, nag the spigot developers about modernizing their API)
- Some internal updates for packetevents(2.9.0 is now required.)
- Updated Lands support
Addon Changes
- Added MatcherPlus Addon
- Allows support for BreweryX and AdvancedItems stacks in shops with improved matching abilities
- Added FabledSkyblock Compat
- Added Dominion Compat
- Added HuskTowns Compat
- Added IridiumSkyblock Compat
- Added member-create for member creation in ARM compat
- Added admin-override and quickshop.arm.admin permission for admin overrides in ARM
Minor Changes
- Added configurations for the coordinates of the display item.
- Added /qs toggledisplayall on/off server/owned
- Players need to have permission node quickshop.toggledisplayall.admin to toggle all on the server.
- Added ability to use abbreviations in /qs price and /qs create commands such as 2.5k for 2500
- Added ability to set default display status using shop.default-display in config.yml
Fixes
- Fixed issue with display item being sent to the moon on 1.21.5
- Fixed issue where TRADE_UI interactions interfered with quick create.
- Fixed issue with displays on protocollib falling through the chest
- Fixed issue with signs on .9 and previous .10 snapshots on early versions
- Implemented some performance improvements for paper servers
- Fixed all outstanding issues with Folia usage.(thanks to RootB33R/SleazLee for contributions)
Possible 6.2.0.11 Features
Here's an outline for some features that may arrive in 6.2.0.11:
- Additional compats/addons that have been piling up.
- see: #1756
- gradle?(interested to see compilation time uplifts)
- Update documentation
- Update configuration comments
- Update configuration system?
- auto updating?
- Allows removal of the update code
- Remove waste spigot modules?
- Any versions of 1.20 that can be discarded due to low use?
- Bug fixing, of course
- Sign parser implementation?
- probably have to re-evaluate since it's been awhile since it has been looked at...
6.2.0.9
6.2.0.9 - Important Note: Contains Exploit Fix, Please Update ASAP.
Remember to backup your DB before updating.
Major Changes
Exploit Fix Included for GUI Exploit
This build fixes an exploit in the GUI system that was recently outlined.
Lots of Events Changes
See discord changelog for event system here
Control Panel Component System Overhaul
The shop control panel system has been overhaul to separate it into different classes. This allows third-party
plugins to add additional components to the control panel easily. There was also an added event, ControlComponentGenerateEvent,
which is called PRE, MAIN, and POST of a ControlComponent being generated. The MAIN phase supports changing
the ControlComponent object with a custom one that will replace the original during control panel sending.
Introduction of the Revamped Packet System
-
About:
- A modular and scalable system for managing packets related to virtual display items in Minecraft.
- Supports both ProtocolLib and PacketEvents libraries for greater flexibility.
-
Custom Packet Factories:
- Modular implementation of
PacketFactoryfor game versions 1.20.x and 1.21.x. - Packet types:
- Spawn Packet: Spawns a virtual item entity at a specific location.
- Metadata Packet: Updates the visual properties of virtual items.
- Velocity Packet: Adds motion/velocity to entities (currently optional).
- Destroy Packet: Removes the entity from the client view.
- Modular implementation of
-
Error Handling and Logging:
- Enhanced debug logs to trace packet-related issues.
- Detailed error messages for missing factories or unregistered listeners.
Improvements:
- Better modular design to facilitate support for future Minecraft versions.
Deprecations:
- Legacy packet handling mechanisms replaced with this new Packet System.
Event System Overhaul
Added
- event/Phase.java - Introduces a phase-based event system to track different stages of an event lifecycle.
- event/PhasedEvent.java - Defines events that occur within different phases, allowing better event state management.
Packet Handling Events:
- event/packet/handler/PacketHandlerAddedEvent.java - Triggered when a new packet handler is registered in the system.
- event/packet/handler/PacketHandlerInitEvent.java - Fired when a packet handler is initialized, useful for debugging or custom setups.
- event/packet/send/PacketHandlerSendDestroyEvent.java - Dispatched when a packet instructs a client to remove an entity from their view.
- event/packet/send/PacketHandlerSendMetaEvent.java - Fired when metadata about an entity is sent via packets.
- event/packet/send/PacketHandlerSendSpawnEvent.java - Triggered when an entity is spawned using packet-based communication.
Shop Events
- ShopUpdateEvent has been replaced with the ShopDatabaseEvent
- ShopAuthorizeEvent has been replaced with the ShopPermissionCheckEvent
- ShopClick, ShopCreate, ShopDelete, ShopLoad have been replaced with similar named events, but they are in the event.management package now, and are phased events.
Shop Settings Events:
- event/settings/ShopSettingEvent.java - Generic event to handle changes in shop settings dynamically.
- event/settings/package-info.java - Documentation package containing metadata for shop settings.
Shop Type-Specific Settings:
- event/settings/type/ShopCurrencyEvent.java - Handles changes in the currency type used in a shop.
- event/settings/type/ShopDisplayEvent.java - Triggers updates when a shop’s display settings (e.g., holograms, signs) are modified.
- event/settings/type/ShopItemEvent.java - Fired when the main item being sold in a shop is changed.
- event/settings/type/ShopNameEvent.java - Occurs when a shop’s name is updated.
- event/settings/type/ShopOwnerEvent.java - Manages ownership transfers and modifications in a shop.
- event/settings/type/ShopOwnerNameEvent.java - Triggered when the owner's display name is modified.
- event/settings/type/ShopPlayerGroupEvent.java - Handles updates to the player group associated with a shop.
- event/settings/type/ShopPriceEvent.java - Dispatched when an item’s price is changed in a shop.
- event/settings/type/ShopSignLinesEvent.java - Manages updates to sign-based shop displays.
- event/settings/type/ShopTaxAccountEvent.java - Fired when a shop's tax account information is modified.
- event/settings/type/ShopTypeEvent.java - Tracks changes in the classification or type of shop.
- event/settings/type/ShopUnlimitedEvent.java - Handles changes to a shop’s unlimited stock setting.
Shop Benefit System:
- event/settings/type/benefit/ShopBenefitAddEvent.java - Fired when a new benefit (e.g., discounts, loyalty rewards) is added to a shop.
- event/settings/type/benefit/ShopBenefitEvent.java - General event for tracking shop benefit modifications.
- event/settings/type/benefit/ShopBenefitRemoveEvent.java - Triggered when a shop benefit is removed.
Removed
- event/details/ShopItemChangeEvent.java - Replaced with
ShopItemEvent.javafor a more consistent structure. - event/details/ShopNamingEvent.java - Merged into
ShopNameEvent.java. - event/details/ShopOwnerNameGettingEvent.java - Superseded by
ShopOwnerNameEvent.java. - event/details/ShopOwnershipTransferEvent.java - Now handled by
ShopOwnerEvent.java. - event/details/ShopPlayerGroupSetEvent.java - Integrated into
ShopPlayerGroupEvent.java. - event/details/ShopPriceChangeEvent.java - Merged into
ShopPriceEvent.java. - event/details/ShopTypeChangeEvent.java - Replaced by
ShopTypeEvent.java. - event/details/ShopUnlimitedStatusEvent.java - Now managed under
ShopUnlimitedEvent.java. - event/display/ShopDisplayItemDespawnEvent.java - Removed in favor of
ShopDisplayEvent.java. - event/display/ShopDisplayItemSafeGuardEvent.java - Consolidated into a broader display event category.
- event/economy/ShopTaxAccountChangeEvent.java - Now included in
ShopTaxAccountEvent.java. - event/economy/ShopTaxAccountGettingEvent.java - No longer necessary due to a refactored shop economy system.
- event/packet/PacketHandlerAddedEvent.java - Moved to
event/packet/handler/PacketHandlerAddedEvent.java. - event/packet/PacketHandlerInitEvent.java - Now handled by
event/packet/handler/PacketHandlerInitEvent.java.
Modified
- event/AbstractQSEvent.java - Updated base event structure to support phase-based execution.
- event/QSCancellable.java - Added new cancel conditions to prevent unintended event termination.
Packet Events:
- event/package-info.java - Updated to reflect new event structures.
- event/packet/PacketHandlerEvent.java - Now supports additional packet handling scenarios.
Minor Changes
- If a player doesn't have permissions for CONTROL_PANEL_UI it'll open the TRADE_UI for them
- Added the quickshopdontsend override to allow server owners to prevent certain messages from sending(paper only)
- Made it so invalid chat entries for UIs escape the chat ui
Config Changes
- added shop.control-panel to control what components of the text control panel are enabled.
- added shop.sign-wax to control if the shop sign is waxed or not, default is false.
- added shop.display-protocol which allows you to select packetevents or protocollib for packet handling
Fixes
- readded the /qs history permissions to the default quickshop.player
- fixed issue where some folks wouldn't have the encoded db column
- Fixed issue with reached-maximum-can-create not being implemented correctly
- fixed issue where pistons would move shulker shops.
- fixed issue where colored shulkers could be bought and put inside non-colored shulker
- fixed issue with griefprevent /transfer command not unregistering owner
- fixed issue where signs weren't updated when lock was set to false
- Fixed issue where slime compat explosive pick wasn't being caught by QS(Thanks to YuanYuanOwO and Starfruit)
- Fixed exploit(thanks to macaw/casper for being the first to report this)
Version Changes
- Removed support for 1.18 and 1.19. These versions had minimal usage.
- Added support for 1.21.5
6.2.0.8
6.2.0.8
Notes
- GH Releases will be used as a tagging method going forward and won't hold the actual jars. Please see the modrinth/spigot pages.
Major Changes
- Added initial Folia Support
- CONTROL_PANEL_UI is a new interaction that allows you to use a GUI control panel instead of the chat one.
- From this GUI you can add/remove staff, transfer ownership, set selling mode of shop, change the price and delete the shop!
- Readded QS History GUI
- Removed Real Item and Entity displays; They provided no advantages over virtual displays and mainly caused issues.
- If protocol lib is not up-to-date/installed it will default to no display.
- Added /qs browse [world], which allows a player to view the shops by server or by world depending of if they attach world as an argument
- Added TRADE_UI interaction, which opens up a GUI-based trading menu for the player to buy/sell predefined, and custom amounts from/to a shop.
- Updated to MC 1.21.3, MC 1.21.4.
- Added VaultUnlocked Support
Minor Changes
- Added 2 new interaction behaviours that will be coming soon. CONTROL_PANEL_UI and TRADE_UI
- Made it so that when price change fees are set to 0, the fee charge message isn't sent.
- Added /qs staffall to manage staff for all shops.
- Added a new shop mode, frozen.
- This allows admins/shop staff to hault trading with the shop temporarily
- This mode was added to the Shop Keeper menu.
- This mode was added to the text-based control panel.
- This mode introduces new commands: /qs silentfreeze and /qs freeze
- Made the default action for /qs suggestprice try to use the itemstack in hand when shop not in sight.
- Added shop.finding.global to remove distance limit for /qs find
- Made sign shop sign waxed to prevent modifications(thanks to ThiagoROX)
- Add SignOpen listener(thanks to ThiagoROX)
- Add sub command overrides(thanks to ThiagoROX)
Internals
- Added style guidelines.
- Added final inside code where possible.
- Made ShopNamingEvent get called when unsetting shop name.
- Added ShopUnlimitedStatusEvent that is called when changing the unlimited status of a shop.
- Rearranged Events into different packages. This will break plugins that rely on the events.
Discord Changes
- Added Sponsor role for those that sponsor through GitHub.
Compat Plugins
- Towny
- Added ruined town config to remove shops when town goes into ruins.
Addon Plugins
SuperiorSkyblock
- Made it so the compat plugin can delete shops when someone is banned from an island.
Fixes
- Fixed issue with Velocity and Bungee Compat Jars
- Fixed issue with Towny Compat Jar not removing shops when plot is cleared, or town is deleted.
- Fix item restrictions being bypassed using shulkers(thanks to TauCubed)
- Fix Towny town/nation account lookup with Essentials(thanks to galacticwarrior9)
Notes
- Pending removal of 1.18/1.19 support soon.
6.2.0.7
WorldGuard addon update. (#1733) * update translations manually to reset crowdin * Update typo in worldguard compatibility.
6.2.0.6
Bug Fixes
- Fixed exploit with shop items and certain functionality(thanks to bridgelol)
- Temporarily disabled QS history while working on replacement due to errors end-users are running into.
- Fixed issue with enchantment restrictions not detecting them in enchanted books(thanks toTauCubed)
What's Changed
Full Changelog: 6.2.0.5...6.2.0.6
6.2.0.5
6.2.0.4
Changes
- Virtual Display Item available again when use ProtocolLib Build 710 and up, please update your ProtocolLib
Bug Fixes
- Fixed display item check when using RealDisplayItem, the check may delete non-display item from player/container inventory if an item contains lore that is a valid JSON string. It should won't affcet most servers.
- Fixed
/quickshop cleanghostwon't delete the stores that trading blacklisted items
6.2.0.3
6.2.0.2
Bug Fixes
- Fixed entity explosion may not check attached block
Bug Fixes (6.2.0.1)
- History GUI's paging button doesn't use translated text
- 1.20.4/1.20.5 didn't use Spigot new potion API
- The potion effect level in shop info panel always smaller one than actual level in RomanNumber
- The blank lines may send to players when you set a translatable text to empty
- Fixed
quickshop.alertthat should be use asquickshop.alertsin PlayerListener