Changelog6.2.0.9

# 6.2.0.9

## 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](https://discord.com/channels/942378696415797298/942378854486528011/1334375445457666090)

### 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
1. **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.

2. **Custom Packet Factories**:
    - Modular implementation of `PacketFactory` for 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.

4. **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.java` for 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