Releases: apace100/apoli
Releases · apace100/apoli
Apoli 2.11.5 (Minecraft 1.20.2)
Changes
- Simplified implementation of
modify_food
power type for making items always edible. - Simplified implementation of
modify_grindstone
power type. - Added support for
*
(current namespace/path) inREGEX_MAP
data type (used by thereplace_loot_table
power type.)
Fixes
- Fixed condition logic in
replace_loot_table
power type. - Fixed
edible_item
power type not working on items usable on blocks. - Fixed
exposed_to_sky
andbrightness
entity condition types not accounting for the world's ambient darkness (in most cases.) - Fixed
modify_enchantment_level
power type not working on empty item stacks (in some cases.)
Full changelog: v2.11.4...v2.11.5
Apoli 2.11.4 (Minecraft 1.20.2)
Fixes
- Fixed oversight where the
action_on_remove
bi-entity action of theentity_set
power type is only being called when removing a temporary entity from an entity set. - Fixed
entity_set
power type ticking temporary entities inconsistently.
Full changelog; v2.11.3...v2.11.4
Apoli 2.11.3 (Minecraft 1.20.2)
Fixes
- Fixed
replace_loot_table
power type ignoring block conditions. - Fixed potential issues with the
inventory
power type.
Full changelog: v2.11.2...v2.11.3
Apoli 2.11.2 (Minecraft 1.20.2)
Fixes
- Fixed temporary UUIDs in the NBT of a power that uses the
entity_set
power type not being removed.
Apoli 2.11.1 (Minecraft 1.20.2)
Fixes
- Fixed
burn
power type ignoring conditions. - Fixed
fire_projectile
power type not accepting zero value in itsinterval
andstart_delay
fields. - Fixed
entity_set
power type not properly executing itsaction_on_remove
bi-entity action upon removing entities.
Full changelog: v2.11.0...v2.11.1
Apoli 2.11.0 (Minecraft 1.20.2)
Warning
Item actions have been changed to operate on a Pair<World, StackReference>
instead of a Pair<World, ItemStack>
, so if you're an addon developer and your addon implements an item action type, please read this migration guide for the steps for migrating and for more information.
Thanks to @MerchantPug for contributing!
Additions
- New power types:
action_on_block_place
andprevent_block_place
, which executes an action upon placing a block and being prevented from placing a block respectively. Both power types support these fields:entity_action
; an optional field, which if specified, executes the entity action on the player that placed/tried placing a block.held_item_action
; an optional field, which if specified, executes the item action on the item used by the player for placing/trying to place a block.place_to_action
; an optional field, which if specified, executes the block action at the position of the block the player has placed/tried to place.place_on_action
; an optional field, which if specified, executes the block action on the block the player placed/tried to place a block on.item_condition
; an optional field, which if specified, only executes the actions if the item used by the player for placing/trying to place a block fulfills the item condition.place_to_condition
; an optional field, which if specified, only executes the actions/prevent the player from placing a block if the block at the position of the block the player is about to place fulfills the block condition.place_on_condition
; an optional field, which if specified, only executes the actions/prevent the player from placing a block if the block the player is about to place a block on fulfills the block condition.directions
; determines whether the actions should be executed/player should be prevented if the player is about to place a block at the specified side(s) of a block.hands
; determines whether the specified actions should be executed/player should be prevented if the player has used one of the specified hand(s) when trying to place a block.result_stack
; an optional field, which if specified, gives the item stack to the player upon placing/trying to place a block.result_item_action
; an optional field, which if specified, executes the item action on the given item stack upon the player placing/trying to place a block.
- New power type:
entity_set
, which provides a storage for storing references of entities. It supports these fields:action_on_add
; an optional field, which if present, executes the bi-entity action on either or both the actor (the entity that has the power) and the target (the entity/entities referenced in the entity set) upon being added on the entity set.action_on_remove
; an optional field, which if present, executes the bi-entity action on either or both the actor (the entity that has the power) and the target (the entity/entities referenced in the entity set) upon being removed from the entity set.
- New entity action type:
revoke_all_powers
, which revokes all powers from the specifiedsource
. - New entity action type:
remove_power
, which removes the specifiedpower
, regardless of its source(s). - New entity action type:
random_teleport
, which teleports the entity to a random location within an area. It supports these fields:area_width
; determines the width of the areaarea_height
; determines the height of the areaheightmap
; an optional field, which if specified, the random location will be anchored to the specified surface of the world.attempts
; determines how many attempts the entity should be teleported to a random location.landing_block_condition
; an optional field, which if specified, the entity will only be teleported on top of a block that fulfills the block condition. Otherwise, the entity will be teleported on top of a block that blocks movement/have solid collision.landing_condition
; an optional field, which if specified, the entity will only be teleported to a location if the entity condition is fulfilled. Otherwise, the entity will only be teleported to a location that do not have any blocks or fluids.landing_offset
; determines the offset to apply to the chosen location. If the X and/or Z offsets are specified, the X and/or Z of the chosen location will be divided (floored) before the offset is applied.loaded_chunks_only
; determines whether to only teleport the entity within loaded chunks.success_action
; an optional field, which if specified, executes the entity action on the entity after the entity has been teleported to a random location.fail_action
; an optional field, which if specified, executes the entity action on the entity if the entity hasn't been teleported.
- New bi-entity action type:
add_to_set
, which adds the target to the specified set of the actor. It supports these fields:set
; the identifier of the entity settime_limit
; determines how long the entity should stay in the entity set in ticks.
- New bi-entity action type:
remove_from_set
, which removes the target from the specifiedset
of the actor. - New bi-entity condition type:
in_set
, which checks if the target is within the specifiedset
of the actor. - New block action type:
spawn_entity
, which spawns an entity at the position of the block being operated on. - New meta condition type:
chance
, which basically only evaluates to true to the specified percentage of the time. - New
/power
sub-command:/power dump
, which outputs the JSON of the specified<power>
in chat (not shared with other opped players.)
Changes
- The
hud_render
field in powers now can accept either an object or an array of objects. If an array of objects is specified, the HUD render will choose one (that's allowed to render and have its condition fulfilled or absent) of the specified objects from top to bottom. - Made the
prevent_entity_collision
power type work for entities with solid collision, like Shulkers and Boats. - Made the
particle
power type and thespawn_particles
entity action type a bit consistent with how vanilla emits particles. - Changed the default resource bar sprite sheet to keep backwards compatibility.
Fixes
- Fixed an exception being thrown on the client when syncing a power in certain edge-cases.
- Fixed application/removal of attribute modifiers of powers that use the
conditioned_attribute
power type. - (#183) Fixed worn armor not being damaged upon taking damage.
- Fixed a stack overflow issue with the
phasing
power type. - Fixed spawnpoint of players not persisting upon being set.
- Fixed desync and more issues with the
/resource operation
command. - (#188) Fixed player abilities not being reset upon leaving a world in a special way.
- Fixed crash caused by the
relative_durability
item condition type. - (#187) Fixed a memory leak issue.
- Fixed the
moving
entity condition type not working reliably.
Full changelog: v2.10.3...v2.11.0
Apoli 2.10.3 (Minecraft 1.20.2)
Changes
- Global power sets can now merge and be replaced. In order to replace or add onto a global power set that has already been replaced, a
loading_priority
value higher than theloading_priority
specified in the replacement global power set must be specified. - Entity actions specified in a power that uses the
action_on_callback
power type is now only executed if the entity condition specified in thecondition
field of a power is fulfilled or absent. - Bi-entity action/condition types are now null-safe, where it now stops early/evaluates to false if neither the actor or target exist.
Fixes
- Fixed ticking implementation of the
action_over_time
power type not properly accounting for when a power is active for the first time or no longer active. - Fixed the
prevent_item_use
power type ignoring the entity condition specified in thecondition
field of a power. - Fixed the
game_event_listener
power type executing the bi-entity action on the owner of the entity that emitted the game event (which is the case if the said entity is a projectile), instead of the entity that emitted the game event. - Fixed the crafting interface opened via the
crafting_table
entity action type closing upon the player moving. - Fixed items that are used on release (e.g: crossbow) not being consumed via the
edible_item
power type.
Full changelog: v2.10.2...v2.10.3
Apoli 2.10.2 (Minecraft 1.20.2)
Changes
- Made modifiers serialize to JSON.
- Regular expression patterns specified in the
replace_loot_table
power type is now pre-compiled, reducing the overhead from re-compiling it every time it replaces a loot table. - Used testing resource bar sprite sheet as the default resource bar sprite sheet.
Fixes
- Fixed enchantments not working caused by the
modify_enchantment_level
power type. - Fixed a crash issue caused by the
nbt
item condition type missing a data field. - Fixed a crash issue caused by the
predicate
entity condition type being provided anull
random identifier. - Fixed a crash issue caused by the
attribute
and other related power types trying to re-apply/remove already applied/removed attribute modifiers. - Fixed a translation error in the
/power revoke
command. - Fixed addition and removal of the sub-powers of a multiple power when syncing.
Apoli 2.10.1 (Minecraft 1.20.2)
Fixes
- Fixed crash issue caused by Calio not including QuiltMC's JSON parser.
Apoli 2.10.0 (Minecraft 1.20.2)
Warning
Item conditions have been changed to evaluate an Pair<World, ItemStack>
instead of an ItemStack
, so if you're an addon developer and your addon implements an item condition type, make sure to change how you're registering your item condition types and evaluating its result to match this change.
Thanks to @MerchantPug, @ThatRobin, @Dahminh and @RaymondBlaze for their contributions!
Additions
- New aliasing system for addon developers: identifier aliasing system. The namespace aliasing system has been deprecated, so make sure to use the new identifier aliasing system instead.
- New damage condition type:
type
, which checks if the damage source is of a specified damage type. - (#163) New power type:
game_event_listener
, which executes an action upon listening to a game event or vibration. It supports these fields:block_action
; an optional field, which if specified, executes the block action at the position where the game event or vibration is emitted.bientity_action
; an optional field, which if specified, executes the bi-entity action on either or both the actor (the entity that emitted the the game event or vibration) and the target (the entity that has the power).block_condition
; an optional field, which if specified, only executes the actions if the game event or vibration is emitted by a block that fulfills the block condition.bientity_condition
; an optional field, which if specified, only executes the actions if either or both the actor (the entity that emitted the game event or vibration) and the target (the entity that has the power) fulfills the bi-entity condition.cooldown
; determines the interval of ticks the power needs to recharge before being able to listen to game events or vibrations again.hud_render
; determines how the cooldown of the power will be visualized in the HUD.range
; determines how far the power can listen for game events or vibrations in blocks.event
; an optional field, which if present, will make the power only listen for the specified game event.events
; an optional field, which if present, will make the power only listen for the specified game events.event_tag
; an optional field, which if present, will make the power only listen for game events included in the specified game event tag.show_particle
; determines whether the vibration should emit a particle effect. It has a default value oftrue
.
- (#114) New item condition type:
fuel
, which checks if the item is considered a fuel item. It also has two fields:comparison
; determines how the fuel time value (in ticks) of the item is compared to a specific value.compare_to
; the value to compare the fuel time value (in ticks) of the item to.
- (#108) New power type:
modify_enchantment_level
, which applies/modifies the level of the specified enchantment to/from the entity. It supports the following fields:enchantment
; the ID of the enchantment to apply/modify the level of to the entity.item_condition
; an optional field, which if specified, only applies/modifies the level of the specified enchantment to/from the entity if the item condition is fulfilled by the item.modifier
/modifiers
; the modifier(s) to apply to the current level of the specified enchantment from the entity.
- (#115) New entity condition types related to the weather:
in_snow
andin_thunderstorm
, which checks if the entity is currently exposed to snowy weather and thunderstorm respectively. - (#103) New power type:
action_on_death
, which executes an action if the entity that has the power dies. It supports three fields:bientity_action
; the action to execute on either or both the target (the entity that died) and the actor (the killer).damage_condition
; an optional field, which if specified, will only execute the action if the damage dealt to the target (the entity that died) fulfills the specified damage condition.bientity_condition
; an optional field, which if specified, will only execute the action if either or both the actor (the killer) and the target (the entity that died) fulfills the specified bi-entity condition.
- (#150) New block condition type:
command
, which behaves similar to thecommand
entity condition type, except it doesn't have any entity to reference via@s
. However, relative position (~ ~ ~
) refers to the position of where the block condition is evaluated. - (#161) New power type:
edible_item
, which make items edible. It supports these following fields:entity_action
; an optional field, which if present, executes the specified entity action on the entity upon consuming an item.item_action
; an optional field, which if present, executes the specified item action on the item consumed by the entity.result_item_action
; an optional field, which if present, executes the specified item action on the item given to the entity as a result of consuming an item.item_condition
; an optional field, which if present, will only make the item edible and execute the specified actions if the item fulfills the specified item condition.food_component
; the food component, such as the item's hunger and saturation values, to apply to the item.return_stack
; an optional field, which if present, will be given to the entity upon consuming an item.consume_action
; determines whether the action of consuming the item is considered "eating" ("eat"
) or "drinking" ("drink"
). It has a default value of"eat"
.consume_sound
; the sound event to play when consuming the item.priority
; determines the priority of which the power will apply its modification to the item. If the item is already considered a food item, the priority value must be higher than 0 to override its already defined food component, consume action and the like.
Changes
- Updated to 1.20.2
- Migrated to Fabric's object-based packet networking API.
- The ticking method of the
action_over_time
power type has been changed to be more consistent. - Powers are now synced on reload. This allows for reloading the data of the powers upon
/reload
-ing or removing powers that no longer exist from entities. - The
prevent_sleep
power type has a new field:priority
, which is used, alongside theset_spawn_point
field, to determine which power will prevent the player to sleep and display a message (and prevent setting its spawn). In terms of which field is accounted first,set_spawn_point
precedespriority
. - The holding logic for the
climbing
power type has been changed; which now defaults to when the entity is sneaking. The default condition is overridden if thehold_condition
field is specified. - The
damage
entity/bi-entity action types have two new fields:modifier
/modifiers
; an optional field, which if specified, modifies the damage to be applied to the target. It uses the max health of the target as the base value.
- The
/power clear
command now targets the entity that invoked the command by default if no selector is specified. - The
modify_crafting
power type now works for recipes provided by powers that use therecipe
power type. - Item conditions now evaluate a
Pair<World, ItemStack>
instead of anItemStack
, similar to item actions. - (#125) The
*_advancement
entity action types have three new fields:criteria
/criterion
; determines the criteria/criterion to grant/revoke to/from the specified advancement.selection
; determines how to select the parent advancement(s) or child(ren) advancement(s) of the specified advancement.
- (#93) The
invisibility
power type has a new field:bientity_condition
; an optional field, which if specified, the target (the entity that has the power) will only be invisible to actors (either the player or mobs that may see the target) if the bi-entity condition is fulfilled by either or both of them.
- (#109) The
raycast
entity action/condition types'distance
field is now optional. It also has four new fields:block_distance
; an optional decimal number that determines the distance of the raycast ifblock
is set totrue
. If absent, it will use the entity's block reach (with Reach Entity Attributes compatibility).entity_distance
; an optional decimal number that determines the distance of the raycast ifentity
is set totrue
. If absent, it will use the entity's entity attack range (with Reach Entity Attributes compatibility).direction
; an optional field, which if specified, determines the direction of the raycast.space
; determines the space of the specifieddirection
.
- (#123) Allowed multiple powers that use the
overlay
power type to work at the same time. - (#83) The
modify
item action type now has more loot context for certain item modifiers to work properly:- The
"this"
entity now refers to the entity holding the item. - Predicates, such as
minecraft:match_tool
, now evaluates the item being modified.
- The
- (#159) The
item_on_item
power type has a new field:click_type
, which determines whether to execute the actions if the player does a left-click or right-click action. - (#149) The way the usability hint of the
prevent_item_use
power type is displayed has been changed:- Hidden powers are no longer excluded from being displayed if non-hidden powers are present.
- Usability hints are now compact by default.
- Names of the powers can be forcefully displayed by pressing the
"key.apoli.usability_hint.show_powers"
keybind (bound to Left Alt by default).
- (#152) HUD renders has a new field:
icon_index
, which determines which icon to display beside the HUD bar.
Fixes
- (#113) The
owner
bi-entity condition type now works for other ownable entities, such as projectiles. - (#...