🔹 Добавлена поддержка
– Minecraft 1.21.8
🔹 Новая функция
– Теперь можно выйти из команды в лобби, кликнув по ней повторно
🔹 Новый звук
– LOBBY_SELECTTEAM_UNDO
🔹 Улучшения
– Улучшена обработка реальных имён игроков и их ников — снижена путаница между ними в разных частях плагина
🔹 Изменения API
– Добавлено: Helper#getPlayerByName()
– Добавлено: Arena#leaveTeamDuringLobby(player)
– RemotePlayer#getName() теперь возвращает Helper#getNickedPlayerRealName(player), а не Player#getName()
– NicknamingHook#getRealName(player) теперь возвращает null, если раньше вернуло бы Player#getName()
🔹 Исправления
– Плагин не запускался на версии 21R5
– В редких случаях нельзя было зайти в арену при быстром движении (если включён kick-outofarena)
– При выключенном балансировщике команд выбирались команды только с 2+ игроками, вместо 1+
– Исправлена MongoQueryException при попытке получить ранг игрока
Поддержка:
Добавлена поддержка версий 1.21.6 и 1.21.7 (спасибо @MetallicGoat)
Добавлена поддержка Spigot-Party-API-PAF (можно использовать бесплатную версию вместо платной расширенной)
EssentialsX: добавлено предупреждение при обнаружении конфликта
Улучшения:
TAB и FeatherBoard теперь избегают конфликтов со скорбордами
Обновлена поддержка CloudNetV4 до RC12
Новая функция:
Настраиваемая защита после возрождения — игрок не получает урон от врагов в течение заданного времени, если сам не атакует
Новый параметр конфига:
respawn-protection
Оптимизация:
Файлы конфигурации, использующие YamlConfigurationDescriptor API, теперь сохраняются эффективнее
Устранено лишнее потребление памяти вышедшими игроками из-за сильной ссылки на их объект Player в приватном инвентаре
Прочие улучшения:
Предметы теперь выдаются игрокам сразу после возрождения, без задержки в 2 тика
Функция "Punch to Deposit" теперь включена в шаблон "HyPixel"
Изменения в API:
Добавлены:Важное изменение:
- PlayerUseSpecialItemEvent#addSessionListener(callback)
- PlayerUseSpecialItemEvent#getSessionListeners()
- PlayerStopSpecialItemEvent
- Arena#getSpecialItemSessions()
- GameAPI#getLastTeleporterSpecialItemUse(Player)
- PlayerQuitArenaEvent#hasLeaveMessage()
- PlayerQuitArenaEvent#setHasLeaveMessage(boolean)
- RemoteAPI#getReservationsCount(Arena)
- RemoteAPI#hasReservation(UUID, Arena)
- PlayerIngameRespawnEvent#getSpawnLocation()
- PlayerIngameRespawnEvent#setSpawnLocation(Location)
- PlayerIngamePostRespawnEvent
PlayerIngameRespawnEvent теперь вызывается до возрождения игрока (в прошлом вызывался и до, и после). Используйте PlayerIngamePostRespawnEvent для обработки после возрождения.
Исправления:
- Исправлена миграция bw1058 для миров swm
- Исправлена неработающая функция магнитных ботинок
- Отменена проверка кастомных улучшений команды, мешающая нестандартным чарам
- Исправлена возможность активации ловушек в endlobby
- Исправлена утечка памяти при выходе игрока во время действия задержки предмета выхода
- Исправлена невозможность покупки предметов в интерфейсах магазина с использованием UI жителя
- Хотфикс утечки памяти в расширенном API PaF
- Исправлена возможная ошибка "Cannot measure distance between world" при использовании трекера и TNT овцы
- Исправлена ошибка взаимодействия, если предмет зрителя содержит только команды без обработчика
- Исправлена ошибка миграции из bw1058 при использовании неинициализированной SQLite
- Исправлено открытие интерфейса наковальни на 1.21.5+
Добавлена поддержка:
– Minecraft 1.21.5 (спасибо @MetallicGoat)
– Конфигурации:
• mongodb-authdb
• hologram-title-vertical-spacings (спасибо @MetallicGoat)
• actionbar-ingame-text (спасибо @MetallicGoat)
• auto-cloning-lobby-arenas-exclude-full
Улучшения производительности:
– Снижено использование sqrt (спасибо @MetallicGoat)
Улучшения:
– В .region-файлы арен теперь сохраняются ключи типов сущностей (1.14+), улучшая кросс-версионную поддержку
– Таблицы очков теперь отображаются сразу после входа, даже если статистика ещё не загружена (спасибо @MetallicGoat)
– Настройка performance теперь также влияет на частоту обновления ловушек: уровень normal увеличивает частоту с 20 до 15 тиков
– Унифицирован разбор enum по имени в конфигурации — теперь терпим к мелким ошибкам написания
Изменения API:
Добавлено:
– PlayerUseSpecialItemEvent#getInventorySlot()
– GameAPI#isSpectator(Player)
– RemoteServer#getPlayers()
– RemoteArena#isCloned()
– RemoteArena#getCloneParent()
– RemoteArena#getClones()
– PlayerDataAPI#registerAchievementType(id, plugin, name, description)
– NMSHelper#setFireballDirection(fireball, direction, speed)
– ArenaSaveBlocksStopEvent
– Arena#getDataFolder()
– Arena#getDataRegenFile()
– Arena#isPlaying(Player)
– Arena#isSpectating(Player)
– Upgrade#isApplicable(Arena)
– PlayerTriggerUpgradeEvent#isAPICall()
– PlayerTriggerUpgradeEvent#hasPlayer()
Изменено:
– UpgradeState#doUpgrade(level, player) теперь позволяет player = null
Ломающие изменения:
– PlayerTriggerUpgradeEvent больше не наследуется от PlayerEvent
– PlayerTriggerUpgradeEvent#getPlayer() теперь может возвращать null, если улучшение вызвано через API
Исправления:
– Хотфикс трекера для 1.21.4 (вызван клиентским багом Minecraft)
– Улучшено автообновление .region-файлов с более старых версий для 1.20R4+ (исправлены сбои с головами игроков и др.)
– Исправлен баг, позволяющий гличить телепортатор путём смены руки во время отсчёта
– В drops-killer-auto-pickup: убийца больше не получает предметы, если умирает раньше убитого
– Исправлено достижение kill_with_half_heart
– Исправлен потенциальный NPE, связанный с экшн-барами (спасибо @MetallicGoat)
– Плейсхолдеры {countdown} и {running-time} теперь корректно обновляются в табличке, даже если не используются в заголовке (спасибо @MetallicGoat)
– Исправлены редкие случаи, когда drops-killer-auto-pickup всё же оставлял дроп
– Исправлена ошибка с минимальным радиусом видимости голограмм при значениях выше sqrt(2^32-1) (переполнение int)
Поддержка:
• Добавлена поддержка Minecraft 1.21.5
Исправления:
• Улучшена задержка при отображении табло при входе на арену
• Исправлен баг с телепорт-итемом, возникавший при его смене во время обратного отсчёта
Прочее:
• Добавлено автоматическое обновление блоков для REGION на версии 1.20R4+
• Автообновление файлов региона теперь работает и для сущностей
Improvements:Performance improvements:
- Players now get teleported to the main world's spawn instead of a random location if no hub position was set
API changes:
- Slightly improved efficiency by avoiding code execution in certain events early
- Improved client-side caching for custom skull textures
Fixed bugs:
- It is now possible to create custom TeamEnchantment targets
- Added Constructor TeamEnchantment(Predicate<ItemStack>, String targetId, Enchantment, int lvl)
- Added TeamEnchantment#isApplicable(ItemStack)
- Added TeamEnchantment#getTargetId()
- Added TeamEnchantment.Target#CUSTOM
- Deprecated TeamEnchantment.Target#byMaterial(Material) is now deprecated for removal
- Added
- Helper#takeItems(player, is, amount)
- Helper#giveItems(player, is, dropOverflow)
- RejoinPlayerIssue.ALREADY_INSIDE
- Fixed NPE when starting the plugin for the first time
- Fixed race-condition if player gets teleported to the lobby after the match started. This only happened on paper and was related to async tp
- Fixed accidentally obfuscating base.json fields, whereby the hubPosition would get reset with every update
- Fixed being able to participate in two arenas at the same time by attempting a rejoin while already joining another one
- Fixed bugs (potentially only for ProxySync + paper 1.21.4) where players would turn into a buggy state when leaving as a spectator
- Fixed being able to swap offhand items in lobby phase
- Fixed steve skulls when applying (legacy) NBT on custom skulls for 1.20.5+
We released a new and free addon! Check it out: Level Shop
Added features:Added support:
- Bypass blocked-commands using new permission "mbedwars.bypassblockedcommands"
- Added ability to make spawners drop a given amount of items at the start of the match
- Added feather fall upgrade
- Traps may now be removed by the original buyer of the trap
Config changes:
- GeyserMC without Floodgate (prior we only supported Floodgate, now both)
Performance improvements:
- Config "floor-foliage-simplified-destruction" will now also function in non-build areas
- Config "interacting" set to false now also prevents flower pot interaction
- Added config to spawners.yml: "spawn-at-start"
- Changes for "drops-killer-auto-pickup":
- Nothing will drop at all if there is no responsible killer
- It now also works for exp besides items
- For upgrade-shop.yml:
- Configured levels config must now start with 1 and increment one-by-one
- Any upgrades with a different schema will be ignored
- This change shouldn't break anything for anyone
- For upgrade-shop.yml:
- The order of configured upgrades is now being respected and properly displayed in the GUI
Improvements:
- Slightly improved efficiency of spawner dropping items
- Improved efficiency of logic that checks whether a block is interactable
- Slightly improved efficiency of messaging system
- Slightly improved efficiency of metadata storage
- Reduced memory footprint of our NBT system
- Improved efficiency of getting arenas by their name
- Improved efficiency of hook manager
- Improved efficiency of upgrade state handling
- Improved efficiency of actionbar text + it's now async
- Improved efficiency (both RAM and CPU) of hologram logic
API changes:
- Now using related player (and not receiving) for papi placeholders when somebody joins or leaves
- Reworked endlobby rejoin (spectators turning into players)
- Prior, we would use the regular “player joining arena” logic. However, that caused a wide array of unexpected problems, whereby we are now adapting on the regular rejoin system.
- Improved system that lookups for legacy block types when using a match-blocks file for REGION arenas from older spigot versions
- Reverted change where all spawners would drop an item at the start of the round
- BEST arena picker selector now fallbacks to a random arena if any is full instead of none (useful for spectating arenas)
- "HyPixelV2" Upgrade shop layout: Now displaying next roman tier in the name
- Updated default "HyPixel" template
Fixed bugs:
- Changed the meaning of QuitPlayerMemory
- Previously, it would only exist if the player was able to rejoin (e.g. his team was not eliminated)
- This would be problematic, as that would prevent losses from being counted
- Now, QuitPlayerMemory always get constructed when the player leaves, unless the match hasn’t started yet (status != LOBBY)
- All memories get cleared once the status changes to RESETTING.
- Added QuitPlayerMemory#isRejoinPermitted()
- Added QuitPlayerMemory#setRejoinPermitted(boolean)
- Added RejoinPlayerIssue.NOT_PERMITTED
- Added:
- enum RejoinPlayerCause
- PlayerRejoinArenaEvent#getCause()
- Permissions.BYPASS_BLOCKED_COMANDS
- KickReason#isRageQuit()
- PlayerOpenArenaChestEvent.ChestType enum
- PlayerOpenArenaChestEvent.OpenPurpose enum
- PlayerOpenArenaChestEvent#getChestType()
- PlayerOpenArenaChestEvent#getPurpose()
- Arena#getChestType(Block)
- Arena#getChestInventory(Block, Player)
- Upgrade#getMinLevel()
- UpgradeState#setCurrentUpgradeLevel(UpgradeLevel)
- UpgradeState#clearUpgrade(Upgrade)
- UpgradeTriggerHandlerType.FEATHER_FALL
- QueuedTrap class
- PlayerRemoveTrapEvent class
- UpgradeState#removeTrap(QueuedTrap, Player)
- HologramEntity#setPerPlayerVisibility(Predicate<Player>)
- HologramEntity#getPerPlayerVisibility()
- HologramEntity#updatePerPlayerVisibility()
- Helper#isInteractableBlock(Material)
- DropType#getSpawnAtStart()
- DropType#setSpawnAtStart(int)
- Deprecated:
- AddPlayerCause#END_LOBBY
- Helper#parseSNBTAsJson(String)
- Helper#composeJsonAsSNBT(JsonObject)
- PlayerOpenArenaChestEvent#isTeamChest()
- PlayerOpenArenaChestEvent#isPrivateChest()
- Breaking:
- Upgrade#getLevels() now returns a List instead of a Set
- UpgradeState#getNextUpgradeLevel(Upgrade) may now return null if max was reached
- UpgradeState#getActiveUpgrades() new returns Collection instead of List
- UpgradeState#getQueuedTraps() now returns Queue<QueuedTrap> instead of List<UpgradeLevel>
- UpgradeState#queueTrap(UpgradeLevel, boolean) now expects a QueuedTrap parameter instead of the UpgradeLevel
- PlayerOpenArenaChestEvent now also gets called for vanilla chests (e.g. shulker boxes, but excluding furnaces etc)
- Fixed PlayerTriggerUpgradeEvent's cancellation not being respected
- Fixed error when migrating from MongoDB
- Fixed that MongoDB storage would look for users in the configured db and not the "admin" db
- Fixed broken TNT sheep&QuickBuy for 1.21 - 1.21.2
- Fixed spectators not becoming visible if "endlobby-tptolobby" was enabled
- Fixed losses not being counted for players not-rejoinable players
- Fixed "blocked-commands" may as well block "allowcommand-stats" and "hubcommands"
- Fixed dropped items potentially not stacking in the inventory for 1.20.4 and older
- Fixed not properly saving & clearing 1.17+ entities folder in vanilla worlds for arenas of type WORLD. As a result, dropped spawners, iron golems etc. would remain for the next match
- Fixed error when running /bw backup list
- Fixed odd warnings when trying to join a full arena while in party
- Fixed bedrock players getting stuck on respawn screen (1.15+)
- Fixed being able to pickup items when leaving as spectator with ProxySync addon
- Fixed various rare CME related to the registry
- Fixed that leaving a server (without /leave command) wasn't considered as a rage quit
- Fixed not properly displaying upgrade amounts for 1.20R4 for "HyPixelV2" Upgrade shop layout
- Fixed not respecting WorldUnloadEvent's cancellation, and thus potentially causing unexpected behavior
Добавлена поддержка:
- MC 1.21.4 (Спасибо @MetallicGoat).
Улучшена поддержка:
- SWM: Добавлена поддержка асинхронной генерации миров (нужно включить в конфиге). ASWM этого не имеет.
Добавлено:
- Двойной прыжок для фаерболов (по умолчанию отключен).
- Возможность настройки погоды и времени для каждой арены (в GUI арен, спасибо @MetallicGoat).
- Добавлен звук телепорта жемчужины края из 1.20.3 для старых версий.
- Компаратор (~) для выбора арены.
Изменения в конфигурации:
- Добавлен параметр custom-handler-config для спаунеров.
- Пользовательские обработчики спаунеров теперь могут использовать свои конфиги.
- Новые параметры:
- customchatmessage-message-lobby
- fireball-air-jump
- fireball-air-jump-ticks
- fireball-multiplier-knockback-enemy
- fireball-multiplier-damage-enemies
- explosion-destroys-items
- redye-blocks-onpickup (Спасибо @MetallicGoat).
- auto-clone-mode-types теперь позволяет задавать режимы для каждого типа арены отдельно (Спасибо @MetallicGoat).
Улучшения производительности:
- SQL-хранилище: улучшена эффективность при загрузке таблиц лидеров.
- Оптимизирован поиск ближайших предметов для спаунеров.
- Уменьшено максимальное количество предметов, выпадающих при отключённом слиянии, с 50 до 20.
Улучшения:
- В случае невозможности выгрузить мир определяется виновный плагин.
- Запрещена установка позиций хаба внутри арен.
- Добавлено новое уведомление об ошибке, если мир арены не загружен.
- Улучшена обработка регенерации в случае выгрузки мира.
- Название арены теперь отображается в заголовке GUI.
- Добавлены звуки к инструментам настройки.
- Взрывы больше не уничтожают выпавшие предметы.
- Устранена задержка появления голограмм.
- Поддержка игроков (макс/мин) выше 16 до 99 в GUI настроек арен.
- Улучшена система спауна предметов на старте раунда (Спасибо @MetallicGoat).
Изменения API:
- Удалены устаревшие элементы API.
- Изменены возвращаемые типы для методов (например, long → Duration).
- Добавлены новые события, классы и методы, включая:
- ArenaWinningDetermineEvent,
- Новые причины киков,
- Расширенные методы для статистики игроков,
- Новый класс ExecutionChain и другие.
Исправления:
- Исправлена сломанная наковальня в 1.21.2–1.21.3 (Спасибо @MetallicGoat).
- Устранена утечка памяти в системе метаданных игроков.
- Исправлены ошибки, связанные с GUIs, сбросом инструментов настройки, ошибками SQL, неправильным выгрузом миров и многим другим.
- Множество багов, связанных с покупкой предметов, нестандартными ID, работа с ProtocolLib и отображением игроков, также исправлены.
- Исправления для работы с 1.8.8 и выше.
Поддержка:
- Добавлена поддержка 1.21.4
- Добавлена поддержка асинхронной генерации мира SWM (необходимо включить в конфигах)
- Добавлена поддержка асинхронной загрузки данных для SWM для улучшения использования TPS
Дополнения:
- Возможность индивидуального изменения времени/погоды арены
- Добавлен параметр /bw arena info <arena> picker для отображения всех значений параметра
- Добавлено «customchatmessage-message-lobby»
- Добавлена более специфическая настройка для режимов клонирования арены
Исправления:
- Исправлена поломка графического интерфейса Anvil на 1.21.2/3
- Исправлена утечка памяти, связанная с мета-системой нового игрока
- Исправлена поломка предметов магазина с пользовательскими идентификаторами при перезагрузке и дублирование предметов магазина, хранящихся в памяти при перезагрузке
- Исправлено нарушение количества недостающих материалов в сообщении при покупке предметов
- Исправлена очень редкая ошибка «PROCEDURE * уже существует» при запуске нескольких серверов с помощью SQL
- Исправлен сбой в настройках множителя урона охранных собак
- Исправлены ошибки с TNT овцами и мини магазином на 1.21.3+
- Исправлено удаление предметов игрока при входе в end-lobby в качестве зрителя
- Еще...
Много чего еще, что не поместится. (А я ленивый, посмотрите на Trello).
Добавлено:Изменения в конфигурации:
- Поддержка версий 1.21.2 и 1.21.3 (благодарность @MetallicGoat).
Улучшение выбора арен:
- Добавлен параметр hanging-interactable.
- Добавлен параметр id для настроек предметов магазина.
- Добавлены параметры для изменения стандартных настроек быстрого доступа к предметам магазина:
- quickbuy-generate-automatic
- quickbuy-default-items
- В файле spawners.yml параметр spawner-delay теперь может быть математическим выражением, что позволяет задавать различные задержки для разных режимов.
Улучшение производительности:
- Полностью переписан парсер условий.
- Теперь можно экранировать символы ", используя \\".
- Переменные и статические значения можно использовать по обе стороны выражения.
- Новый парсер автоматически добавляет недостающие скобки.
- Ошибки парсера теперь показывают точное положение проблемы.
Другие улучшения:
- Оптимизировано получение команды по расположению её кровати.
Изменения API:
- Запрещено взаимодействие с висящими объектами (если не отключено).
- Добавлена переменная выбора арен remaining_slots.
- При вступлении в арену проверяется, чтобы все участники группы могли разместиться.
- Добавлен плейсхолдер PAPI %mbedwars_activity%.
Исправления:
- Исправлено:
- Неправильные данные ServerInfoDto в JavaDoc.
- Ошибки добавленных через API товаров по сравнению с конфигурируемыми.
- Неправильная ошибка клонирования ShopItem при использовании ShopPage#addItem(ShopItem).
- События LobbyCountdown не вызывались (благодарность @MetallicGoat).
- Добавлено:
- Класс LazyReference.
- Асинхронные методы получения частей кровати команды.
- Методы работы с идентификаторами ShopItem и получения их из API.
- Возможность задавать продолжительность дропа спавнеров в виде формулы.
- Изменения в выборщиках арен:
- Удалены устаревшие методы в ArenaConditionComparative.
- Добавлен класс ArenaConditionInput.
- Появились методы для сериализации условий и выборщиков арен.
- Различные ошибки (отсутствие предметов в лобби и т.д.) при использовании без PaperMC.
- Исправлена проверка на возможность строительства для платформы спасения и мостов.
- Проблема с плейсхолдером {arena} при отправке сообщения "мир не существует".
- Автозагрузка мира при совместном использовании арены с одним регионом.
- Ошибка с началом арены, если максимальное количество игроков становилось меньше минимального.
- Проблема с ошибкой NoSuchFieldError CraftMagicNumbers в версии 1.21.1.
- Исправления в работе взрывчатки и их взаимодействии с кроватями и картой.
- Устранение проблем с некорректными данными лидербордов и статистикой при использовании MySQL и MongoDB.
- Обновлена поддержка последней версии ASWM.
НОВИНКА: Настраивайте арены с помощью хотбара, избегая кликов в графическом интерфейсе. Значительно повышает эффективность!
Добавлена функция:Изменения в конфигурации:
- Инструмент настройки
- Получите его, нажав на кнопку в /bw arena setupgui
- Или используйте команду: /bw arena setuptool
Улучшения:
- Добавлено:
- «gui-titles-by-page» в свойства макета магазина
- Последние оставшиеся .cm2 файлы конфигурации, которые были предназначены для голо-линий, были объединены в один «hologram-lines.yml».
- Вместе с этим происходит миграция на новый формат файлов, которая происходит автоматически
- Спасибо, MetallicGoat
Изменения в API:
- Режим видимости спавнера больше не мерцает всеми голограммами при любом изменении
- Время игры теперь обновляется соответствующим образом, когда вы делаете /bw stats
- Добавлена возможность купить предмет в заданный слот хотбара, нажав на цифру клавиатуры при наведении на предмет
- Магазины, открытые с помощью мини-магазина, теперь закрываются по истечении его времени
- У NPC больше нет мини-тега с именем
- Парсинг пикера арены теперь четко указывает, если селектор отсутствует (Спасибо @MetallicGoat )
- Добавлена поддержка телепортации с руки для специального предмета
- Счетчик специальных предметов телепорта больше не зависит от производительности сервера (раньше больше лагов означало, что это занимает больше времени)
Исправлены ошибки:
- Исправлено невызов AsyncArenaCloneQueueEvent
- Добавлены:
- (Опционально заменяемый) ClickListener#onNumClick(player, number)
- PlayerBuyInShopEvent#getTargetInvSlot()
- ShopProduct#give(игрок, команда, арена, множитель, целевойInvSlot)
- Класс ClickListener.Proxy
- PlayerUseSpecialItemEvent#isOffHand()
- TeamEnchantment.Target.MACE (Спасибо MetallicGoat )
- Переработаны обработчики пользовательских спавнеров (серьезные изменения!)
- Теперь они называются CustomDropTypeHandler
- Теперь обработчики могут также реализовывать возможности магазина (Более гибкие и простые в реализации)
- Утратил силу DropType#getHoldingAmount(ItemStack[]), поскольку этот метод не поддерживает пользовательские обработчики
- Добавлено PlayerShopProductGivingDetermineEvent#getCallingDropTypeHandler()
- Добавлено PlayerShopProductGivingDetermineEvent#setCallingDropTypeHandler(handler)
- Событие PlayerModifyBlockPermissionEvent теперь может вызываться и в других случаях.
- К случаям относится, например, использование специальных предметов (мост, спасательная платформа)
- #getBukkitEvent() теперь Nullable
- Исправлена ошибка при повторном вступлении в партию
- Исправлен счетчик «потратил 200 предметов в магазине», сбрасывающийся при повторном присоединении
- Исправлена ошибка, когда в магазине HyPixelV2 была отключена быстрая покупка.
- Исправлены различные ошибки, связанные с асинхронной телепортацией на PaperMC
- Исправлена редкая ошибка, приводившая к невозможности присоединиться к аренам при регенерации миров на 1.13+ из-за бесконечной загрузки чанков
- Исправлена невозможность телепортироваться на арену для голосования из-за того, что на ней отсутствовал игровой мир
- Исправлена ошибка, из-за которой спасательная платформа могла размещать блоки там, где не должна была
- Исправлена ошибка дублирования специального предмета телепортатора
- Исправлен счетчик специальных предметов телепортации, продолжающий работать даже после смерти