- Changed `canThrow` default to `true` in `ProjectileItemBuilder`
- Implemented `setModel` and `setModelClass` in `CustomEntityBuilder`
- Added `setRenderer` and `setRendererClass` methods to `CustomEntityBuilder`
- Fixed remapping issues caused by setting remap to `true` on Forge methods
- `event.createCustom()` now supports non-living entities, optionally rendering with GeckoLib or through an existing model class
- Fixed desync issues in wrapped custom entity classes by defaulting to original entity values
- Added `playMuffledStepSound`, `playCombinationStepSounds`, and `playStepSound` to EntityJS entity builders
- Added fallback overrides for methods commonly overridden in final entity classes: `playSwimSound`, `doWaterSplashEffect`, `processFlappingMovement`, and `canBeHitByProjectile`
- Added `playStepSound`, `playMuffledStepSound`, and `playCombinationStepSounds` to `EntityJSEvents.modifyEntity()`
- Replaced all instances of `const` with `let` in ProbeJS typings
- Fixed `ProjectileAnimatableJS` and `ProjectileEntityJS` world-save errors when summoned without an item
- Changed `canThrow` default to `true` in `ProjectileItemBuilder`
- Implemented `setModel` and `setModelClass` in `CustomEntityBuilder`
- Added `setRenderer` and `setRendererClass` methods to `CustomEntityBuilder`
- Fixed remapping issues caused by setting remap to `true` on Forge methods
- `event.createCustom()` now supports non-living entities, optionally rendering with GeckoLib or through an existing model class
- Fixed desync issues in wrapped custom entity classes by defaulting to original entity values
- Added `playMuffledStepSound`, `playCombinationStepSounds`, and `playStepSound` to EntityJS entity builders
- Added fallback overrides for methods commonly overridden in final entity classes: `playSwimSound`, `doWaterSplashEffect`, `processFlappingMovement`, and `canBeHitByProjectile`
- Added `playStepSound`, `playMuffledStepSound`, and `playCombinationStepSounds` to `EntityJSEvents.modifyEntity()`
- Replaced all instances of `const` with `let` in ProbeJS typings
- Fixed `ProjectileAnimatableJS` and `ProjectileEntityJS` world-save errors when summoned without an item
- Fixed server crash from using `newGeoLayer` & `newGlowingGeoLayer` on a dedicated server
- Scripters can now directly input a UUID while setting entity synced data with `entity.setSyncedData()` instead of needing to wrap in an Optional
- Fixed crash from UUID being cast to Optional<UUID> when saving 'uuid' synced data
- Fixed server crash from using `newGeoLayer` & `newGlowingGeoLayer` on a dedicated server
- Scripters can now directly input a UUID while setting entity synced data with `entity.setSyncedData()` instead of needing to wrap in an Optional
- Fixed crash from UUID being cast to Optional<UUID> when saving 'uuid' synced data
- Greatly optimized modify builder initialization to only fire once upon base Entity init
- Changed `createCustom` method adding a 3rd parameter giving direct access to the respective entity's modification event. This also avoids weird Rhino ambiguity issues with the KubeJS default `createCustom` method. Reference the [updated wiki page](https://github.com/liopyu/EntityJS/wiki/Clone-Entity-Registry-Event#example) for the example of the revision
- Greatly optimized modify builder initialization to only fire once upon base Entity init
- Changed `createCustom` method adding a 3rd parameter giving direct access to the respective entity's modification event. This also avoids weird Rhino ambiguity issues with the KubeJS default `createCustom` method. Reference the [updated wiki page](https://github.com/liopyu/EntityJS/wiki/Clone-Entity-Registry-Event#example) for the example of the revision
- Moved some synced entity data logic to existing `onAddedToLevel` method
- Added `defineSyncedData()` to ModifyEntityBuilder allowing for auto client/server synced data on entities
- Added `entity.addSyncedData()`, `entity.setSyncedData()` & `entity.getSyncedData` to Entity class
- Added most vanilla entity geo models in kubejs assets namespace
- Added `addRenderItemLayer` method to living entity builders giving scripters the choice to render hand items on their models
- Added `addArmorItemLayer` method to living entity builders allowing for armor rendering capabilities
- Modified sasuke.geo.json to handle armor/hand held items
- Added the GeoRenderer to all living entity render callbacks as an extra available field
- Added `addRenderItemLayer` method to living entity builders giving scripters the choice to render hand items on their models
- Added `addArmorItemLayer` method to living entity builders allowing for armor rendering capabilities
- Modified sasuke.geo.json to handle armor/hand held items
- Added the GeoRenderer to all living entity render callbacks as an extra available field
- Added `renderType()` & `setRenderType()` to non living model layer builders for custom render type implementation
- Added `shouldRenderAtSqrDistance` to all living entity builders
- Added `renderType()` & `setRenderType()` to non living model layer builders for custom render type implementation
- Added `shouldRenderAtSqrDistance` to all living entity builders
- The `modifyEntity` event is now only posted during the `rendertype` event if the registered JS event handler actually defines `setTextureLocation` or `setRenderType`
- The `modifyEntity` event is now only posted during the `rendertype` event if the registered JS event handler actually defines `setTextureLocation` or `setRenderType`
- Made `facesTrajectory` method available to all Non-Living entities instead of just animatable projectiles.
- Moved `facesTrajectory` render implementation to the entity's `render` method from the `scaleModelForRender` method to be a post-render effect
- Added `newGeoLayer` & `newGlowingGeoLayer` to Non-Living entities instead of just living entities
- Added `EntityJSEvents.createAttributes` event to add new attributes to an entity
- Removed some accidental comments from a few probejs typings
- Made base non-living entity `facesTrajectory` field default to false while projectiles default to true
- Fixed casting error when modifying `createCustom`entities
- Made `facesTrajectory` method available to all Non-Living entities instead of just animatable projectiles.
- Moved `facesTrajectory` render implementation to the entity's `render` method from the `scaleModelForRender` method to be a post-render effect
- Added `newGeoLayer` & `newGlowingGeoLayer` to Non-Living entities instead of just living entities
- Added `EntityJSEvents.createAttributes` event to add new attributes to an entity
- Removed some accidental comments from a few probejs typings
- Made base non-living entity `facesTrajectory` field default to false while projectiles default to true
- Fixed casting error when modifying `createCustom`entities
- Fixed `signalTo` method in EyeOfEnderItemBuilder to not throw errors if blockPos returns null
- Added `signalToStructureTag` & `signalToStructure` methods to EyeOfEnderItemBuilder making it far easier to define a structure/structure tag the eye will signal to
- Fixed `signalTo` method in EyeOfEnderItemBuilder to not throw errors if blockPos returns null
- Added `signalToStructureTag` & `signalToStructure` methods to EyeOfEnderItemBuilder making it far easier to define a structure/structure tag the eye will signal to
- Added special `createCustom` method in entity registry event giving scripters the ability to dynamically copy/create entities via any LivingEntity class, including modded entities
- Added `getAnimatableEntity()` to LivingEntity class to get a custom entity instance if applicable
- Added `ignoreExplosion()` override to ModifyEntityBuilder
- Added special `createCustom` method in entity registry event giving scripters the ability to dynamically copy/create entities via any LivingEntity class, including modded entities
- Added `getAnimatableEntity()` to LivingEntity class to get a custom entity instance if applicable
- Added `ignoreExplosion()` override to ModifyEntityBuilder
- Fixed crash when disabling goals for custom Bee entities
- Added `getEntityBuilder` to EntityJSUtils binding class
- Added `.attributes()` method to BaseLivingEntityBuilder giving access to entity modification event from custom entity builders
- Fixed Attribute Modification Event not working for custom entities
- Added `setFacesTrajectory` to the `ProjectileAnimatableJSBuilder` to add implementation for `geckolib_projectile` determining if the projectile's model visually faces the direction it's currently headed in
- Moved some client logic to client side only classes to avoid errors on dedicated servers when modifying certain entity methods.
- Added `setFacesTrajectory` to the `ProjectileAnimatableJSBuilder` to add implementation for `geckolib_projectile` determining if the projectile's model visually faces the direction it's currently headed in
- Moved some client logic to client side only classes to avoid errors on dedicated servers when modifying certain entity methods.
- Added `setFacesTrajectory` to the `ProjectileAnimatableJSBuilder` to add implementation for `geckolib_projectile` determining if the projectile's model visually faces the direction it's currently headed in
- Moved some client logic to client side only classes to avoid errors on dedicated servers when modifying certain entity methods.
- Fixed missing collar implementation to WolfEntityJS
- Fixed GeoLayerJS rendering logic not working when builder.render was called
- Fixed entity modification `canAttack` callback resulting in NullPointerException crash
- Fixed missing collar implementation to WolfEntityJS
- Fixed GeoLayerJS rendering logic not working when builder.render was called
- Fixed entity modification `canAttack` callback resulting in NullPointerException crash
- Added client/server synced data methods via `.defineSyncedData` entity modification method.
- Fixed missing collar implementation to WolfEntityJS
- Fixed GeoLayerJS rendering logic not working when builder.render was called
- Fixed entity modification `canAttack` callback resulting in NullPointerException crash
- Added missing arguments to CustomInstructionKeyframeEventJS,ParticleKeyFrameEventJS & SoundKeyFrameEventJS including `entity`, `animationTick`, `controller` & `keyframeData`
- Added getCurrentAnimationTick() to Geckolib AnimationController giving the current tick the playing animation is at.
- Made `setCanShootFromDispenser()` in projectile builders return the builder instead of void allowing for proper builder method chaining
- Added missing arguments to CustomInstructionKeyframeEventJS,ParticleKeyFrameEventJS & SoundKeyFrameEventJS including `entity`, `animationTick`, `controller` & `keyframeData`
- Added getCurrentAnimationTick() to Geckolib AnimationController giving the current tick the playing animation is at.
- Made `setCanShootFromDispenser()` in projectile builders return the builder instead of void allowing for proper builder method chaining
- Added missing arguments to CustomInstructionKeyframeEventJS,ParticleKeyFrameEventJS & SoundKeyFrameEventJS including `entity`, `animationTick`, `controller` & `keyframeData`
- Added getCurrentAnimationTick() to Geckolib AnimationController giving the current tick the playing animation is at.
- Made `setCanShootFromDispenser()` in projectile builders return the builder instead of void allowing for proper builder method chaining
- Added missing arguments to CustomInstructionKeyframeEventJS,ParticleKeyFrameEventJS & SoundKeyFrameEventJS including `entity`, `animationTick`, `controller` & `keyframeData`
- Added getCurrentAnimationTick() to Geckolib AnimationController giving the current tick the playing animation is at.
- Added `isMoving()` boolean to Entity universally
### Added
- **`ArrowEntityJS`**: Made `getPickupItem` method accessible.
- **`Entity` Classes**: Added `isMoving()` boolean method to all `Entity` classes.
- **Projectile Entities**: Added optional dispenser behavior to the following classes:
- `TridentEntityJS`
- `ProjectileEntityJS`
- `ProjectileAnimatableJS`
- `ArrowEntityJS`
### Improved
- **`ArrowEntityJS`**: Properly implemented `knockBack` logic to ensure additional knockback only applies when `knockBack` is greater than 1.
### Removed
- Removed some shadowed fields in `ArrowEntityJS` to prevent potential conflicts.
### Added
- **`ArrowEntityJS`**: Made `getPickupItem` method accessible.
- **`Entity` Classes**: Added `isMoving()` boolean method to all `Entity` classes.
- **Projectile Entities**: Added optional dispenser behavior to the following classes:
- `TridentEntityJS`
- `ProjectileEntityJS`
- `ProjectileAnimatableJS`
- `ArrowEntityJS`
### Improved
- **`ArrowEntityJS`**: Properly implemented `knockBack` logic to ensure additional knockback only applies when `knockBack` is greater than 1.
### Removed
- Removed some shadowed fields in `ArrowEntityJS` to prevent potential conflicts.
### Added
- **`ArrowEntityJS`**: Made `getPickupItem` method accessible.
- **`Entity` Classes**: Added `isMoving()` boolean method to all `Entity` classes.
- **Projectile Entities**: Added optional dispenser behavior to the following classes:
- `TridentEntityJS`
- `ProjectileEntityJS`
- `ProjectileAnimatableJS`
- `ArrowEntityJS`
### Improved
- **`ArrowEntityJS`**: Properly implemented `knockBack` logic to ensure additional knockback only applies when `knockBack` is greater than 1.
### Removed
- Removed some shadowed fields in `ArrowEntityJS` to prevent potential conflicts.
- Added missing `canTakeItem` & `canPickUpLoot` logic in Mob Modification event
- Moved `canTakeItem` from `ModifyLivingEntityBuilder` to `ModifyMobBuilder`
- Added missing `canTakeItem` & `canPickUpLoot` logic in Mob Modification event
- Moved `canTakeItem` from `ModifyLivingEntityBuilder` to `ModifyMobBuilder`
- Added missing `canTakeItem` & `canPickUpLoot` logic in Mob Modification event
- Moved `canTakeItem` from `ModifyLivingEntityBuilder` to `ModifyMobBuilder`
### Fixed
- Resolved an issue in the `doHurtTarget` method where the modified entity was incorrectly passed into both the target and entity fields. The correct target entity is now passed.
### Added
- Added a default translation key for entities to ensure proper default name handling.
### Removed
- Removed custom jump and controlling logic for entities that are already mountable, preventing unnecessary overrides.
- Removed `armorItems` and `handItems` logic from most entities to avoid overriding existing functionality.
- Eliminated shadowing logic in the Wither entity to ensure proper behavior.
- Removed shadowing values from `PiglinEntityJS` to ensure proper behavior.
### Fixed
- Resolved an issue in the `doHurtTarget` method where the modified entity was incorrectly passed into both the target and entity fields. The correct target entity is now passed.
### Added
- Added a default translation key for entities to ensure proper default name handling.
### Removed
- Removed custom jump and controlling logic for entities that are already mountable, preventing unnecessary overrides.
- Removed `armorItems` and `handItems` logic from most entities to avoid overriding existing functionality.
- Eliminated shadowing logic in the Wither entity to ensure proper behavior.
- Removed shadowing values from `PiglinEntityJS` to ensure proper behavior.
### Fixed
- Resolved an issue in the `doHurtTarget` method where the modified entity was incorrectly passed into both the target and entity fields. The correct target entity is now passed.
### Added
- Added a default translation key for entities to ensure proper default name handling.
### Removed
- Removed custom jump and controlling logic for entities that are already mountable, preventing unnecessary overrides.
- Removed `armorItems` and `handItems` logic from most entities to avoid overriding existing functionality.
- Eliminated shadowing logic in the Wither entity to ensure proper behavior.
- Removed shadowing values from `PiglinEntityJS` to ensure proper behavior.
### New Features
- **Added `setMoveControl`**, `setLookControl`, and `setJumpControl` methods to mob builders.
These methods allow custom control over entity movement, looking behavior, and jumping behavior through provided function implementations.
- **Added custom LookControl, MoveControl, and JumpControl builders via `EntityJSUtils` binding**.
These builders can be called using:
- `EntityJSUtils.createLookControl()`
- `EntityJSUtils.createMoveControl()`
- `EntityJSUtils.createJumpControl()`
### Bug Fixes
- **Fixed PathNavigation method**: Improved the flexibility and handling of custom path navigation logic for entities.
- **Removed shadowed fields from certain mobs**: Cleaned up duplicated or shadowed fields to prevent unintended behavior in mob logic.
- **Fixed various mob interaction methods (`mobInteract`)**: Adjusted interaction methods to properly default to the `super` implementation when needed.
### New Features
- **Added `setMoveControl`**, `setLookControl`, and `setJumpControl` methods to mob builders.
These methods allow custom control over entity movement, looking behavior, and jumping behavior through provided function implementations.
- **Added custom LookControl, MoveControl, and JumpControl builders via `EntityJSUtils` binding**.
These builders can be called using:
- `EntityJSUtils.createLookControl()`
- `EntityJSUtils.createMoveControl()`
- `EntityJSUtils.createJumpControl()`
### Bug Fixes
- **Fixed PathNavigation method**: Improved the flexibility and handling of custom path navigation logic for entities.
- **Removed shadowed fields from certain mobs**: Cleaned up duplicated or shadowed fields to prevent unintended behavior in mob logic.
- **Fixed various mob interaction methods (`mobInteract`)**: Adjusted interaction methods to properly default to the `super` implementation when needed.
### New Features
- **Added `setMoveControl`**, `setLookControl`, and `setJumpControl` methods to mob builders.
These methods allow custom control over entity movement, looking behavior, and jumping behavior through provided function implementations.
- **Added custom LookControl, MoveControl, and JumpControl builders via `EntityJSUtils` binding**.
These builders can be called using:
- `EntityJSUtils.createLookControl()`
- `EntityJSUtils.createMoveControl()`
- `EntityJSUtils.createJumpControl()`
### Bug Fixes
- **Fixed PathNavigation method**: Improved the flexibility and handling of custom path navigation logic for entities.
- **Removed shadowed fields from certain mobs**: Cleaned up duplicated or shadowed fields to prevent unintended behavior in mob logic.
- **Fixed various mob interaction methods (`mobInteract`)**: Adjusted interaction methods to properly default to the `super` implementation when needed.
- **Added missing `mobInteract` methods in some vanilla builders**: Ensured proper implementation of interaction methods in vanilla entity builders.
- **`createNavigation` now calls `super` in vanilla builders**: Ensures the default `super` method is used when no `createNavigation` method is provided in the builder.