--- a/net/minecraft/world/entity/monster/Vex.java
+++ b/net/minecraft/world/entity/monster/Vex.java
@@ -48,11 +_,11 @@
     protected static final EntityDataAccessor<Byte> DATA_FLAGS_ID = SynchedEntityData.defineId(Vex.class, EntityDataSerializers.BYTE);
     private static final int FLAG_IS_CHARGING = 1;
     @Nullable
-    private EntityReference<Mob> owner;
+    public EntityReference<Mob> owner;
     @Nullable
     private BlockPos boundOrigin;
-    private boolean hasLimitedLife;
-    private int limitedLifeTicks;
+    public boolean hasLimitedLife;
+    public int limitedLifeTicks;
 
     public Vex(EntityType<? extends Vex> entityType, Level level) {
         super(entityType, level);
@@ -66,7 +_,7 @@
     }
 
     @Override
-    protected boolean isAffectedByBlocks() {
+    public boolean isAffectedByBlocks() {
         return !this.isRemoved();
     }
 
@@ -181,17 +_,17 @@
     }
 
     @Override
-    protected SoundEvent getAmbientSound() {
+    public SoundEvent getAmbientSound() {
         return SoundEvents.VEX_AMBIENT;
     }
 
     @Override
-    protected SoundEvent getDeathSound() {
+    public SoundEvent getDeathSound() {
         return SoundEvents.VEX_DEATH;
     }
 
     @Override
-    protected SoundEvent getHurtSound(DamageSource damageSource) {
+    public SoundEvent getHurtSound(DamageSource damageSource) {
         return SoundEvents.VEX_HURT;
     }
 
@@ -293,7 +_,7 @@
         @Override
         public void start() {
             Mob owner = Vex.this.getOwner();
-            Vex.this.setTarget(owner != null ? owner.getTarget() : null);
+            Vex.this.setTarget(owner != null ? owner.getTarget() : null, org.bukkit.event.entity.EntityTargetEvent.TargetReason.OWNER_ATTACKED_TARGET); // CraftBukkit
             super.start();
         }
     }
@@ -352,7 +_,10 @@
 
             for (int i = 0; i < 3; i++) {
                 BlockPos blockPos = boundOrigin.offset(Vex.this.random.nextInt(15) - 7, Vex.this.random.nextInt(11) - 5, Vex.this.random.nextInt(15) - 7);
-                if (Vex.this.level().isEmptyBlock(blockPos)) {
+                // Paper start - Don't load chunks
+                final net.minecraft.world.level.block.state.BlockState blockState = Vex.this.level().getBlockStateIfLoaded(blockPos);
+                if (blockState != null && blockState.isAir()) {
+                    // Paper end - Don't load chunks
                     Vex.this.moveControl.setWantedPosition(blockPos.getX() + 0.5, blockPos.getY() + 0.5, blockPos.getZ() + 0.5, 0.25);
                     if (Vex.this.getTarget() == null) {
                         Vex.this.getLookControl().setLookAt(blockPos.getX() + 0.5, blockPos.getY() + 0.5, blockPos.getZ() + 0.5, 180.0F, 20.0F);
