[MD] <small>[Compare with 0.9.0](https://github.com/AllayMC/Allay/compare/0.9.0...0.9.1)</small> **For Minecraft: Bedrock Edition 1.21.80 - 1.21.124** ### Added - (API) `DebugText` now support `scale` property. - (API) Introduced `CallerThread` annotation to events to specify the execution thread's type. - (API) Added methods `PlayerManager.isOperator()` and `PlayerManager.setOperaotor()`. - (API) Readded `DebugShapeViewer`, and `WorldViewer` now extends `DebugShapeViewer`. There should be no breaking changes. - (API) Added `SenderType.ACTUAL_PLAYER` which limits the command sender from must be an actual player. - (API) Introduced new `Player` class, there are some things worth noting: - A `Player` object is basically controlling an `EntityPlayer` object now. Most client-related methods are moved to the new `Player` class (e.g. most of the methods in the old `EntityPlayerClientComponent`). - A `EntityPlayer` object now can be either a real player or a fake player. This is determined by checking if the player entity is `controlled` by a `Player` object (use `EntityPlayer.isActualPlayer()` method). - You can now create fake player via `EntityTypes.PLAYER` just like how you created the other entity. - The type of some variables has been changed from `EntityPlayer` to `Player` to better fit their purpose, such as the `player` variable in `PlayerJoinEvent`. - (API) Added `PlayerSpawnEvent` event. - Command nodes that the player doesn't have permission to access will not be sent to the player, and the commands will be resent when the specific permission changes. - Updated log4j2 patterns to use `%logger{0}` instead of `%c{0}`. - Added support for bedrock 1.21.124 (protocol version 860). ### Changed - (API) Renamed class `Structure` to `StructureFile` to avoid confusion with the upcoming structure feature in world gen. - (API) Refactored the permission system. The permission system has now been reconstructed into a lightweight, easy-to-interface system in preparation for docking with LuckPerms. There are some breaking changes, especially in command creation. Check the updated documentation on our website for details. - (API) Update some events: - `IPBanEvent` and `IPUnbanEvent` are moved from `network` to `server` package. - `PlayerBanEvent`, `PlayerUnbanEvent`, `PlayerLoginEvent`, `PlayerJoinEvent` and `PlayerQuitEvent` are moved from `player` to `server` package. - `ClientConnectEvent` and `ClientDisconnectEvent` are renamed to `PlayerXXXEvent`. They are also moved from `network` to `server` package. - (API) Added a new `permissions` parameter to the parameter list of method `MessageReceiver.sendCommandOutputs()`. - (API) Changed member `SimpleEntityAction.CRITICAL_HIT` to independent `CriticalHit(int count)` record (the same to `ENCHANTED_HIT`) due to the addition of the newly added `count` parameter since protocol version 859. - (API) Renamed method `PlayerManager.getOnlinePlayerByName()` to `PlayerManager.getPlayerByName()` for clarity and consistency. - (API) Moved field `joinMessage` in `PlayerLoginEvent` to `PlayerSpawnEvent` since the server now will broadcast the join message when the player spawns instead of when logged in. - Permission data now will not be saved into the player's nbt data, which allows third permission plugins to store the permission data in their own way. The core will only saved a `operator` list now. ### Fixed - Fixed debug shape rendering in 1.21.120. ### Removed - (API) Removed useless method `Entity.isHeadYawEnabled()`. - (API) Removed classes `EntityPlayerBossBarViewerComponent`, `EntityPlayerChunkLoaderComponent`, `EntityPlayerFormViewerComponent` and `EntityPlayerScoreboardViewerComponent`. [/MD]
[MD] <small>[Compare with 0.8.3](https://github.com/AllayMC/Allay/compare/0.8.3...HEAD)</small> **For Minecraft: Bedrock Edition 1.21.80 - 1.21.120** ### Added - (API) Implemented `FakeChestContainer` and `FakeDoubleChestContainer`. Plugin developer can get fake container instance through the new `FakeContainerFactory` class. - (API) Introduced record `EntityPlayerBaseComponent.Speed` to represent the `speed`, `flySpeed`, and `verticalFlySpeed` for player. - Implemented copper torch. - Implemented copper door. - Add support for bedrock 1.21.120. ### Changed - (API) Event `ContainerCloseEvent` is not cancellable now. - (API) Changed the getter/setter methods for `speed`, `flySpeed`, and `verticalFlySpeed` to use the new `Speed` record. ### Fixed - Fixed (maybe a bug) sometime event `ContainerOpenEvent` will be called twice. - Fixed incorrect player speed after applying `speed` and `slowness` effect. These effects now will also affect the fly speed and vertical fly speed of the player. - Fixed a rare NPE when the client disconnects while haven't logged in. ### Removed - (API) Removed `headYaw` from `Location3d(c)`, `Location3f(c)`, and `Location3i(c)`. [/MD]
[MD] <small>[Compare with 0.8.1](https://github.com/AllayMC/Allay/compare/0.8.1...0.8.2)</small> **For Minecraft: Bedrock Edition 1.21.80 - 1.21.110** ### Added - (API) Added method `OtherChunkAccessibleContext.getBlockEntity()`. - (API) Added method `DyeColor.getColor()` to get the corresponded `Color` object of the dye color. - (API) Added methods `EntityPlayerClientComponent.viewPlayerListChange()` and `EntityPlayerClientComponent.viewPlayerPermission()`. - (API) Added particle `SimpleParticle.FIREWORK_CONTRAIL`. - (API) Added event `FireworkExplodeEvent` which will be called when a firework rocket is about to explode. - (API) Added class `ItemDyeComponent` which is used in all items that can be used as dye. - (API) Implemented firework and firework star. Multiple classes including `FireworkType`, `FireworkExplosion` were added. - Implemented recipes for fireworks. - Implemented elytra. The fall distance for the player will be reset if the player is gliding. - Player's height will be changed when the player is sneaking, swimming, gliding, or crawling now. ### Changed - (API) Method `ItemStack.saveExtraTag()` won't return a `null` value when the encoded extra tag is empty now. - (API) Used `double` instead of `float` for player speed, fly speed, and vertical fly speed. - (API) Renamed field `SimpleSoundEvent.TWINKLE` to `SimpleSoundEvent.FLICKER`. - (API) Renamed field `SimpleEntityAction.FIREWORK_EXPLOSION` to `SimpleEntityAction.FIREWORK_EXPLODE`. - (API) Renamed class `AllayNbtUtils` to `AllayNBTUtils`. - (API) Flattened packages except `events` under package `org.allaymc.api.entity.component`. - Optimized memory performance when loading chunks by reducing the large number of temporary objects generated in the light update queue. - Renamed `ItemComponent` to `ItemDefinition` in many places. ### Fixed - Player in spectator mode will no longer lose the saturation level. - Speed, fly speed, and vertical fly speed for the player won't be saved now. - The online player list shown in the dashboard will be correctly updated when a player quits now. - Fixed an issue where the client would sometimes get stuck on the screen of death. - The client will be disconnected now if failed to decode the login packet sent from the client. ### Removed - (API) Removed internal method `ArmorContainer.onArmorChange()`. [/MD]
[MD] <small>[Compare with 0.8.0](https://github.com/AllayMC/Allay/compare/0.8.0...0.8.1)</small> **For Minecraft: Bedrock Edition 1.21.80 - 1.21.110** ### Added - (API) Implemented void damage. New methods `EntityLivingComponent.hasVoidDamage()` and `DamageContainer.voidDamage()` were added. - (API) Implemented lightning rods. - (API) Implemented (copper) lanterns. - (API) Implemented copper golem statues. - (API) Implemented copper chains. - (API) Implemented heads. - (API) Implemented painting. - (API) Added field `SimpleSound.PAINTING_PLACE`. - (API) Added classes `PaintingType`, `EntityPaintingBaseComponent`. - (API) Added method `DamageContainer.api(float)`. - (API) Added method `MathUtils.grow(AABBd, BlockFace, double)`. - (API) Added method overload `Entity.remove(Runnable)`. ### Changed - (API) Renamed field `SimpleSound.SIGN_WAXED` to `SimpleSound.WAXED`. - (API) Renamed method `EntityUndeadComponent.getCatchesFireUnderSunlight()` to `EntityUndeadComponent.ignitedBySunlight()`. - (API) Changed the return type of methods `Entity.getOffsetAABB()` and `Entity.getOffsetAABBForCollisionCheck()`. They return `AABBdc` instead of `AABBd` now. - Changed the behavior of method `EntityLivingComponent.kill()`. It now applies 1,000,000 damage to the entity instead of setting the health to zero directly. ### Fixed - Disabled dead timer for item entity. - Fixed fire damage wasn't given when the on fire tick is continuously updated. - Fixed the bug that air supply, effect particle, and on fire state are invisible. - Fixed an issue where the server could not be launched in certain locales (e.g. Turkey). [/MD]
[MD] <small>[Compare with 0.7.1](https://github.com/AllayMC/Allay/compare/0.7.1...HEAD)</small> **For Minecraft: Bedrock Edition 1.21.80 - 1.21.110** ### Added - (API) Implemented basic bed feature. - (API) Implemented arrow and bow. A new event `EntityShootBowEvent` is added. - (API) Implemented noteblock. - (API) Introduced PlayerInteractBlockEvent. - (API) Introduced PlayerBookEditEvent. - (API) Introduced methods `Entity.getOffsetAABBForCollisionCheck()` and `Entity.checkBlockCollision()`. - (API) Introduced event `BlockExplodeEvent`. - (API) Introduced option `ServerSettings.NetworkSettings.enablev6` to close ipv6 if needed. - (API) Introduced field `PlayerRespawnEvent.respawnLocation` which can be changed to modify the respawn location of a player after death. - (API) Introduced field `LiquidHardenEvent.hardenedBlockPosition` which is the position of the hardened block. - (API) Introduced `api_version` for plugin descriptor, which can set the api version requirement of a plugin. - (API) Introduced component `EntityPlayerScoreboardViewerComponent` for player. - (API) Introduced a bunch of `XXXViewer` (e.g. `WorldViewer`) interfaces which is a tiny wrapper for packet operations. This is inspired by df-mc/dragonfly to reduce the code associated with network packet contained in api module. - (API) Introduced a bunch of functional interfaces in package `utils.funtion`. - (API) Introduced classes `EntityFlag` and `EntityData` which are correspond to classes in the protocol library. - (API) Introduced enum `DiscType` for music disc. - (API) Introduced method `Chunk.addChunkTask()` that adds a task which will be performed later in the chunk tick. - (API) Introduced method `EntityBaaeComponent.applyAnimation()` and class `EntityAnimation`. - (API) Introduced classes `EntityAction` and `BlockAction`. - (API) Introduced class `Skin` as the replacement for the `SerializedSkin` class in protocol lib. - (API) Introduced a new `MessageChannel` system to replace the old `broadcastXXX()` methods in `Server`. The default message channel of the server can be got using method `Server.getMessageChannel()` and can be changed using method `Server.setMessageChannel()`. - (API) Introduced new registry `Registries.BIOMES` which contains all available biomes in the game. This is the replacement for the old `BiomeId` enum. Biome data is also accessible through method `BiomeType.getBiomeData` now. - (API) Introduced method `Command.isDebugCommand()` which can be overridden to determine whether the command is a debug command. Debug command name will be shown blue client-side. - (API) Introduced class `NBTIO` which replaced the old `fromNBT()` methods in `XXXHelper` classes. - (API) Introduced interfaces `FormViewer` and `EntityPlayerFormViewerComponent`. - Implemented sharpness enchantment. - Implemented `SetDifficultyPacketProcessor` to support changing level difficulty through setting menu. - Block entity's custom name will be set to the custom name of the item now, which allows the player to change the inventory name of containers. - Players can now extinguish the fire on the surface of the block by left-clicking. - Introduced a dirty flag for block layers in chunk sections. Now blocks will only be rewritten to the database if they are changed. This would speed up the time used during server shutdown significantly if there are many only loaded chunks. - Added support for basic multi-version. The server now supports 1.21.80 - 1.21.110 client to join. - The motion of the player will be added to the arrow shot by the player now. ### Changed - (API) Renamed method `Entity.despawn()` to `Entity.remove()` as a clarification with other methods like `Entity.despawnFrom()` and `Entity.despawnFromAll()`. - (API) Renamed entries in class `TrKeys`. The old `M_XXX` is renamed to `MC_XXX` and `A_XXX` is renamed to `ALLAY_XXX`. - (API) Renamed field `Block.pos` to `Block.position`. - (API) Renamed class `BlockUpdateService` to `BlockUpdateManager`. - (API) Renamed class `ChunkService` to `ChunkManager`. - (API) Renamed class `EntityService` to `EntityManager`. - (API) Renamed class `EntityPhysicsService` to `EntityPhysicsEngine`, and physics engine related classes are now moved to package `org.allaymc.api(server).world.physics`. - (API) Renamed class `LightService` to `LightEngine`, and light engine related classes are now moved to package `org.allaymc.api(server).world.light`. - (API) Renamed class `PlayerService` to `PlayerManager`. - (API) Renamed class `ScoreboardService` to `ScoreboardManager`. - (API) Renamed package `org.allaymc.api(server).client` to `org.allaymc.api(server).player`. - (API) Renamed classes `BlockStateSafeGetter` and `ItemTypeSafeGetter` to `BlockStateGetter` and `ItemTypeGetter`. - (API) Renamed class `ApiInstanceHolder` to `APIInstanceHolder`. - (API) Renamed class `EntityStatus` to `EntityState`. - (API) Renamed `FullContainerType` to `ContainerType`. All the network related code inside are moved to server module. - (API) Renamed classes `PlayerArmorContainer`, `PlayerInventoryContainer` and `PlayerOffhandContainer` to `ArmorContainer`, `InventoryContainer` and `OffhandContainer`. - (API) Renamed method `TextReceiver.sendTr()` to `TextReceiver.sendTranslatable()` for better readability. - (API) Renamed method `LoginData.isXboxAuthenticated()` to `LoginData.isAuthed()`. - (API) Renamed package `i18n` to `message`. - (API) Renamed class `TextReceiver` to `MessageReceiver` and method `TextReceiver.sendText()` to `MessageReceiver.sendMessage()`. - (API) Renamed class `DefaultDescriptor` to `ItemTypeDescriptor`. - (API) Renamed item stack network id to unique id for better readability, changes are made to multiple related methods. - (API) Renamed method `Command.getCommandOverloads()` to `Command.getOverloads()`. - (API) Renamed method `BlockState.getBlockStateTag()` to `BlockState.getBlockStateNBT()`. - (API) Renamed class `EntityDamageComponent` to `EntityLivingComponent`. - (API) Renamed class `EntityPlayerNetworkComponent` to `EntityPlayerClientComponent`. - (API) Renamed class `BlockEntityHolderComponent` to `BlockBlockEntityHolderComponent` to match the naming convention. - (API) Refactored the container system, multiple methods were renamed/deleted. See the commit history for details. - (API) Refactored the permission system to add support for multiple parents in a permission group. See the commit history for details. - (API) Due to the new `XXXViewer` system, a number of network related methods are removed (e.g. `Entity.createSpawnPacket()`). See the commit history for details. - (API) Flattened all classes under `player` package. - (API) Introduced new `GameMode` enum, and the old `GameType` used in protocol lib is unused since it has many game types which only exist in vanilla. - (API) Moved effect-related methods from `EntityBaseComponent` to `EntityLivingComponent`. - (API) Moved class `ComponentManager` from api to server module since it is useless in api module. - (API) Moved classes `BlockPropertyProcessor`, `BlockPlaceHelper` and `FortuneDropHelper` from api to server. - (API) Moved classes `Structure` and `StructureException` from `utils` to `world` package. - (API) Moved class `BlockAndItemIdMapper` from api to server module. - (API) Moved all effect implementations from api to server module. - (API) Moved classes under package `component.interfaces` to `component` package. - (API) Moved class `ScoreboardStorage` form package `scoreboard.storage` to `scoreboard` package. - (API) Moved classes `HashUtils` and `HashException` from package `utils` to `utils.hash`. - (API) Moved classes `Identified`, `Identifier`, `IdentifierUtils` and `InvalidIdentifierException` from package `utils` to `utils.identifier`. - (API) Moved class `GameLoop` from api module to server module. - (API) Moved class `JSONUtils` and the classes only used by this util from api module to server module. - (API) Moved class `Difficulty`, `DimensionInfo`, `Sound` and `Weather` from package `world` to package `world.data`. - (API) Moved class `NPCCommandSender` from api module to server module. - (API) Moved class `ClientStatus` from package `network` to package `player` and renamed it to `ClientState`. - (API) Moved the implementations of `EnchantmentType` from api module to server module. - (API) Moved class `CommandParseException` from api module to server module. - (API) Moved methods `BlockStateData.fromJson()` to class `BlockStateDataLoader`. - (API) Moved several data classes for block and item to packages `block.data` and `item.data`. - (API) Moved class `XXXId` from api to server, since the user is expected to use objects in `XXXTypes`. - (API) Moved events `PacketSendEvent` and `PacketReceiveEvent` from api module to server module. - (API) Moved package `item.descriptor` to `item.recipe.descriptor` since the item descriptor is only used in recipe system. - (API) Moved `XXXInitInfo` classes to their parent packages. - (API) Moved class `CommonEnums` from api to server. - (API) Moved classes `CachedSimpleSelectorArgument` and `CachedFilterSelectorArgument` from api to server. - (API) Moved classes `XXXTag` and `XXXTags` from `tag` package to `data` package. - (API) Moved class `DamageType` out from class `DamageContainer`. - (API) Moved class `ServerSettings` from api to server. - (API) Moved class `WorldSettings` from api to server. - (API) Moved classes `BanInfo` and `Whitelist` from api to server. Plugin should use the APIs in `PlayerManager` instead of reading/writing the config directly. - (API) Updated several methods in `EntityBaseComponent` to use `WorldViewer` as the viewer of entity instead of `EntityPlayer`. - (API) Refactored the weather system. World will hold only one `Weather` instance now. - (API) Refactored the container system. All container implementations are moved to server module now. - (API) Refactored the sound and particle system, now each sound and particle instance is a pure data object or an enum of `SimpleSound`/`SimpleParticle` if it doesn't require additional parameters. - (API) Refactored the recipe system, network-related code is moved to the server module. - (API) Made classes `UIProfile`, `DeviceInfo` and `Device` as the inner classes of `LoginData`. - (API) Made classes `APINotImplementedException`, `MissingImplementationException`, `MissingRequirementException` and `APIInstanceHolder` as the private subclasses of `AllayAPI`. - (API) Made class `LoginData` as an interface, the implementation is moved to the server module. - (API) Replaced protocol library class `ModalFormCancelReason` with `FormCancelReason` in the modal form APIs. - (API) Replaced protocol library class `CreativeItemCategory` with `CreativeItemCategory.Type` in the creative item APIs. - (API) Class `BossBar` now accepts `BossBarViewer` instead of `EntityPlayer` directly, but the usage won't change since `EntityPlayer` implemented `BossBarViewer`. - (API) Changed methods in `ItemSignBaseComponent` to return `BlockType` instead of `BlockId`. - (API) Changed the parameters of method `WorldPool.loadWorld()`. ### Fixed - Fixed the bug that snowball will always make knockback even if the entity being hit is in damage cool down. - Fixed the bug where Ender Pearls would deal damage to Blazes. - Fixed an NPE bug that could occur in extreme cases for the light engine. - Fixed incorrect hardened block pos when lava flow to the water from above. - Fixed the bug where plugins lacking soft dependencies could not be loaded. - Fixed the bug where plugins which have dependencies will only be loaded but not enabled. - Fixed the sub chunk sending system. - Fixed the bug that food leve is not frozen when world difficulty is set to peaceful. - Fixed the placement of wall sign. - Fixed the bug that jukebox accepts any type of item, it now only allows music disc item to be placed. ### Removed - (API) Removed methods `isClientCacheEnabled()`, `isNetworkEncryptionEnabled()` and `getEncryptionSecretKey()` in `EntityPlayerClientComponent` because these methods are not very useful as APIs. - (API) Removed classes `Abilities` and `AdventureSettings`. - (API) Removed class `CustomBlockComponent` since it is never used. - (API) Removed class `Metadata` which is used in entity. Using the getter/setter methods for entity data and flag in `EntityBaseComponent` directly. - (API) Removed class `EntityAttributeComponent`, health related methods are moved to `EntityLivingComponent` and experience/food related methods are moved to `EntityPlayerBaseComponent`. - (API) Removed class `XXXCustomTags`, all the custom tags are merged to `XXXTags` and the namespace is renamed to `minecraft` instead of `allay`. - (API) Removed classes `BaseCommand` and `SimpleCommand`, and plugin commands now should extend `Command` directly. - (API) Removed class `PacketReceiver`. - (API) Removed class `IntMappedRegistry`. - (API) Removed class `WorldGeneratorType` which is not very useful. - (API) Removed adventure settings related permissions in `Permissions` since adventure settings should only change when the game mode change. - (API) Removed field `CommonEnums.GAMEMODE_ENUM`. - (API) Removed field `networkId` in `EntityId` since it is never used. - (API) Removed method `Difficulty.from(String)`. - (API) Removed methods `ChunkLoader.onChunkInRangeSend()` and `ChunkLoader.onChunkOutOfRange()`, they are replaced by `WorldViewer.viewChunk()` and `WorldViewer.removeChunk()`. - (API) Removed method `WorldData.sendTimeOfDay()`. - (API) Removed method `UnsafeChunk.getPlayerChunkLoaders()`. - (API) Removed methods `Dimension.addLevelSoundEvent()` and `Dimension.addLevelEvent()` due to the new sound/particle system. - (API) Removed methods `Dimension.sendBlockUpdateTo()`, please use `WorldViewer.viewBlockUpdate()` instead. - (API) Removed network-related methods in class `BlockEntityBaseComponent`, use the newly introduced world viewer interface instead. - (API) Removed methods `BlockEntityHolderComponent.createBlockEntity()` and `BlockEntityHolderComponent.removeBlockEntity()` since these methods are not expected to be touched by the user. - (API) Removed method `EntityBaseComponent.applyEntityEvent()` which is replaced by the new entity action system. - (API) Removed method `EntityBaseComponent.saveNBTWithoutPos()` which is never used. - (API) Removed method `Position3ic.toNetwork()`. - (API) Removed method `BlockEntityBaseComponent.sendPacketToViewers()`. - (API) Removed chunk packet related methods in `UnsafeChunk`. - (API) Removed method `CommandSender.getCommandOriginData()`. - (API) Removed method `CommandSender.handleResult()`. - (API) Removed network related methods in classes `ScoreboardLine` and `Scorer`. - (API) Removed method `BlockState.toNetworkDefinition()`. - (API) Removed method `Container.toNetworkItemData()`. - (API) Removed methods `toNetwork()`, `getChunkDataPacket()` and `toEntryInfo()` in class `Pack`. - (API) Removed method `EntityPlayerClientComponent.getClientSession()`. - (API) Removed method `EnchantmentInstance.toNetwork()`. - (API) Removed network-related methods in the command system. - (API) Removed method `Command.getCommandFormatTips()`. - (API) Removed methods `BlockPropertyType.getProcessor()` and `BlockPropertyType.setProcessor()`. - (API) Removed network-related code in `Weather` - (API) Removed method `BlockType.register()`. - (API) Removed method `GenerateFunction.getName()`. - (API) Removed method `Entity.teleportAsync()` since the normal teleport method is not blocking now. - (API) Removed field `BlockPlaceEvent.entity` since the entity can be obtained from the interact info. - (API) Removed a number of useless build-in permissions which are listed in class `Permissions`, the developer should listen to the corresponded events. [/MD]
[MD] <small>[Compare with 0.6.0](https://github.com/AllayMC/Allay/compare/0.6.0...0.7.0)</small> ### Added - (API) Added `GameRule.LOCATOR_BAR`. - (API) Added method `BlockFace.getHorizontalIndex()` to get the horizontal index of the block face. - (API) Added method `BlockFace.fromHorizontalIndex()` to get the block face from the horizontal index. - (API) Added event `PlayerInteractEntityEvent`. - (API) Added events `PlayerBucketFillEvent` and `PlayerBucketEmptyEvent`. - (API) Added class `CustomItemComponentDataGenerator` which adds basic support for custom item. - (API) Added method `CreativeItemCategory.getNamedGroup()` to get a named group in a creative category by its name. - (API) Added class `CreativeItemGroups` which contains all the available creative item groups in vanilla. - (API) Added event `ItemFrameUseEvent` which is called when an item frame is used. - (API) Added `scale` property for `DebugArrow`. - (API) Added methods `updateMotion()`, `trySetLocation()` and `applyMotion()` to `EntityBaseComponent`. These methods are intended only be called by physics engine, and user should override them only. - (API) Added method `onCollideWithBlock()` to `EntityBaseComponent`. - (API) Added `ProjectileLaunchEvent` and `ProjectileHitEvent` events. - (API) Added `PlayerMapInfoRequestEvent` event. - (API) Added method `EffectType.getColor()` to get the color of an effect type. - (API) Added class `PotionType` which represents the type of potion bottle item. - (API) Added methods `BlockBehavior.onEntityInside()` and `Entity.onInsideBlock()`. - (API) Added method `CustomItemComponentDataGenerator.Builder.cooldown()` to set cooldown for custom item. - (API) Added methods `BlockBehavior.onProjectileHit()` and `Entity.onProjectileHit()`. - (API) Implemented writable book and written book. - (API) Implemented (glowing) item frame. - (API) Implemented map. - (API) Implemented snowball. - (API) Implemented potion and splash potion. - (API) Implemented ender pearl. - The color of the player on the locator bar is now calculated based on their name. - Added overloads for methods `AllayXXXType.Builder.build()` which accept a custom `ClassLoader`. This parameter should be used by plugins if plugins want to create custom item type, because plugins classes are loaded by `JarPluginClassLoader`. - Added support for in-plugin resource pack, which allows plugins to include their resource pack under `assets/resource_pack`. This is useful for plugins that have custom items or blocks that require a resource pack to be displayed correctly. - Players now can see each other's permission level in pause menu. - Improved `/kick` command. - Added support for 1.21.100. ### Changed - (API) Renamed method `BlockFace.fromId()` to `BlockFace.fromIndex()`. - (API) Several methods in `PackLoader` are renamed to better match their usage. - (API) Renamed method `CommandSender.getCmdExecuteLocation()` to `CommandSender.getCommandExecuteLocation()`. - (API) Moved plugin i18n file directory from `lang` to `assets/lang`. - (API) Renamed `ItemFoodComponent` to `ItemEdibleComponent`. - (API) Renamed `PlayerEatFoodEvent` to `PlayerEatEvent`. - (API) Method `Entity.teleport()` now return a `boolean` value which indicates whether the event is cancelled. - (API) Updated method `Entity.knockback()`. It now accepts a custom `additionalMotion` vector. - (API) Renamed class `BlockStateWithPos` to `Block`. - Commands `/op` and `/deop` now use player target parameter instead of string parameter.` - Refactored knockback related logic, it now better matches the vanilla. ### Fixed - Fixed the bug that `AvailableCommandsPacket` won't be resent to the player if command permissions changed, usually when using `/op` and `/deop` commands. - Fixed trapdoor placement. - Fixed melon/pumpkin stem drop. - Fixed the bug that vibration visual feature can't be enabled in the settings menu when playing in the server. - Fixed lag in entity movement due to packets not being sent immediately. - Fixed falling blocks, they now become blocks instead of dropped items when they hit the ground. - Fixed the bug that client's offhand won't get updated when setting offhand item. - Fixed a possible NPE in method `ItemBaseComponent.isCorrectToolFor()`. - Fixed the bug that lava and fire won't ignite the entity - Fixed NPE when creative player breaks bedrock. ### Removed - (API) Removed method `BlockPlaceHelper.processDirection4Property()`. - (API) Removed several default methods in `EntityPlayerNetworkComponent` that forward call to `LoginData` for better codebase. - (API) Removed methods `PackLoader.hasFolder()` and `PackLoader.forEachIn()`, since these methods are never used. - (API) Removed method `MathUtils.grow()`. Consider using `AABBd.expand` instead. - (API) Removed methods `BlockBehavior.canCollideWithEntity()` and `EntityBaseComponent.hasBlockCollision()`. - (API) Removed fields `customKnockbackXXX` in `DamageContainer`. Consider setting `DamageContainer.hasKnockback` to `false` and apply your own knockback logic. [/MD]
[MD] <small>[Compare with 0.5.0](https://github.com/AllayMC/Allay/compare/0.5.0...0.6.0)</small> **For Minecraft: Bedrock Edition 1.21.93** ### Added - (API) Added APIs for the new `DebugShape` system. Available debug shape classes can be found under `org.allaymc.api.debugshape`, and add/remove methods for debug shape are available in `Dimension` class. - (API) Added method `World.getState` as the replacement for the removed `World.isRunning` method. - (API) Added `ServerSettings.NetworkSettings.raknetGlobalPacketLimit` to control the global packet limit for RakNet. - (API) Added support for ipv6, and two new options `ipv6` and `portv6` are added to `server-settings.yml`. - (API) Added `PlayerMoveEvent.setRevertTo()` method which allow to specify custom cancel/revert position for `PlayerMoveEvent`. - Added support for bedrock 1.21.93. ### Changed - (API) Method `EntityService.getEntitiesInChunk` is considered not thread-safe to better its behavior now. - (API) Refactored `LoginData` to match the update of LoginPacket recently. Method `LoginData.getDisplayName()` was renamed to `LoginData.getXname()`. - (API) All constructors of `EffectXXXType` are now package-private to prevent plugins from constructing them directly. Plugin developers are expected to use `EffectTypes` class to get the effect types. - (API) Method `Dimension.setBlockState()` now return `boolean` instead of `void`, since in some cases the block state may not be set successfully. ### Fixed - (API) Fixed the bug that `BlockPlaceEvent.getBlockState()` won't return the accurate block state that is being placed. - Fixed the bug that in some cases entities would still spawn after a server reboot even though they had been killed. - Fixed `/fill` command behavior, it now more closely matches the vanilla behavior. ### Removed - (API) Removed `World.isRunning` method, please use `World.getState` method instead. - (API) Removed `BlockPlaceEvent.getItemUsed()`, consider using `EntityPlayer.getItemInHand()` instead. [/MD]
[MD] <small>[Compare with 0.4.1](https://github.com/AllayMC/Allay/compare/0.4.1...HEAD)</small> **For Minecraft: Bedrock Edition 1.21.90** ### Added - (API) Introduced new option `raknet-packet-limit` in `ServerSettings` to control the maximum number of datagram packets each client can send within a single RakNet tick. - Added docker and docker-compose support, now you can build docker image by your own (image will be uploaded to Docker Hub in the future). - Added support for bedrock 1.21.90. ### Changed - (API) Removed classes under `org.allaymc.api.client.skin`. `SerializedSkin` class in protocol library is used directly now. - Replaced the outdated event loop group handling with new `MultiThreadIoEventLoopGroup`. - Refactored permission system, see commit history for more info. ### Fixed - Fixed block picking behavior. - Fixed fence gate opening in server-side. - Fixed quartz and purpur blocks behavior. - Fixed `BlockFace.UP` axis. - Fixed potential NPE in light service during server shutdown. [/MD]
[MD] <small>[Compare with 0.3.0](https://github.com/AllayMC/Allay/compare/0.3.0...0.4.0)</small> **For Minecraft: Bedrock Edition 1.21.80** ### Added - (API) Added `DamageContainer#fallingBlock(float)`. - (API) Added `BlockStateWithPos#updateBlockProperty(BlockPropertyType<DATATYPE>, DATATYPE)` method. - Added Glided Blackstone, Gravel and Glowstone drop. - Implemented ladder, infested blocks, ice, snow, sea lantern, dead bush and end portal frame behavior. - Implemented basic behavior for scaffolding. - Implemented chorus plant & flower behavior. - Implemented walls & fence gate behavior. - Added support for bedrock 1.21.80. ### Changed - (API) `onFall()` now accepted `fallDistance`. - Refactored light engine, and it should work much faster than before with multiple bug fixes. - Refactored falling block system, see commit history for more info. - Replaced `PaleMossCarpetSide(FACE)` and `WallConnectionType(FACE)` to `PaleMossCarpetSide` and `WallConnectionType`. - Refactored `BlockStateWithPos`, now this allows calling `BlockState` methods directly through `BlockStateWithPos`. ### Fixed - (API) Fixed binomial chance. - (API) Fixed `DIRECTION_4` mapper. - Fixed swords block breaking time. - Fixed `NullPointerException` when breathe disabled. - Fixed Beetroot, Carrots, Leaves, Potatoes, Redstone Ore, Grass and Wheat drops. - Fixed `SetTimePacket` spamming. - Fixed random bounds. - Fixed `BlockBreakEvent` cancelling. - Fixed spam click bug. - Fixed chicken food points. - Fixed jukebox music continue playing when broken. - Fixed incorrect horizontal sky light propagation. - Fixed `Position3i` math methods. - Fixed execute commands in terminal. [/MD]
[MD] <small>[Compare with 0.2.0](https://github.com/AllayMC/Allay/compare/0.2.0...0.3.0)</small> **For Minecraft: Bedrock Edition 1.21.70** ### Added - (API) Added `ANVIL`, `STONECUTTER`, `GRINDSTONE`, `CARTOGRAPHY_TABLE`, `LOOM` and `SMITHING_TABLE` container types. - (API) Implemented all behaviors for `Stonecutter`, `Grindstone`, `Smithing Table` and `Anvil`. - (API) Added `ItemStack#isEmptyOrAir()` method. - (API) Added `BlockPlaceHelper#processDirection4Property()` method. - (API) Added `RecipeContainer` interface for validating crafting packets. - (API) Added `ItemRepairableComponent` to check if an item can be repaired with a specific material. - (API) Added `ItemTrimmableComponent` for trimming armor. - (API) Added `AnvilDamageEvent`, `AnvilTakeResultEvent` and `GrindstoneTakeResultEvent` for plugins. - (API) Added `ProtocolInfo.ITEM_STATE_UPDATER` which corresponds to `ProtocolInfo.BLOCK_STATE_UPDATER`. - (API) Added `CommandNode#addLeaf(Function<CommandNode, CommandNode>)` method which helps keeping chain calls when using custom command node. - (API) Introduced `PlayerService`, and added `Server#getPlayerService` method. Note that there are also a number of method moves from `Server` to `PlayerService`. - (API) Added `ClientDisconnectEvent`. - (API) Added `PlayerJoinEvent#joinMessage` and `PlayerQuitEvent#quitMessage` and correspond setters. Now these messages can be edited by plugins. - (API) Added `BlockBaseComponent#getDropXpAmount` method. - (API) Added option `tickDimensionInParallel` to control whether tick dimensions in the same world in parallel during world tick. - (API) Added `BlockFace#fromMinecraftCardinalDirection` and `BlockFace#isVertical` methods. - (API) Added `BlockStateWithPos#getBlockEntity` method. - (API) Implemented chest pairing, and several related interfaces & objects including `BlockEntityPairableComponent`, `DoubleChestContainer`, are added to api module, see commit history for more details. - (API) Added support for the new elements in simple and custom form: divider and header. Label element now can be added to simple form as well. - Added support for bedrock 1.21.70. - Implemented ores. - Added `InternalRegistries#TRIM_PATTERNS` and `InternalRegistries#TRIM_MATERIALS`. ### Changed - (API) Renamed durability related methods in`ItemBaseComponent`: - `getDurability()` -> `getDamage()` - `setDurability()` -> `setDamage()` - `tryReduceDurability()` -> `tryIncreaseDamage()` - (API) Moved player, ban/whitelist related methods from `Server` to the new `PlayerService` class. - (API) Moved `Server#getNetworkInterface` method from `Server` to the new `PlayerService` class. `NetworkInterface` is now held by `PlayerService` rather than `Server`. - (API) Moved `PlayerQuitEvent#reason` to the newly introduced event `ClientDisconnectEvent`. `PlayerQuitEvent` will only be called for already logged in player now. - (API) Removed `BlockEntityBaseComponent#clearCustomName` method, use `BlockEntityBaseComponent#setCustomName(null)` to clear custom name. - Removed `BlockEntityContainerHolderComponentImpl#constructor(Supplier<Container>, Consumer<ContainerViewer>, Consumer<ContainerViewer>)`. - Optimized `setItemStack` handling in `ItemStackRequestPacket` to no longer require sending an `InventorySlotPacket` (Issue #66). - Use `AtomicReference<ServerState>` instead of `AtomicBoolean`'s fields for state management ### Fixed - (API) Fixed `BlockStateData#isTransparent()` method. - Fixed torch placement on non-full blocks (e.g., walls, fences) and automatic placement detection. - Fixed skin display issue in 1.21.60. - Fixed EnderChest behaviour and drops. - Fixed LightningRod placing. - Fixed Door placing. - Fixed two bugs in `/give` command which make the gave item amount being shown incorrectly. - Fixed block breaking time calculation to match Minecraft's official breaking time formula, resolving a rounding issue that caused slight discrepancies. - Fixed a bug in sky light calculation which causes the sky light stop propagating. ### Removed - (API) Removed `Server#findOnlinePlayerByName` method which is duplicated with `Server#getOnlinePlayerByName`. - Removed loot table api. [/MD]