The idea is that a block has a radius, within which if a player appears, then an effect must be applied on it until he goes back outside this radius. Something like a beacon from the usual minecraft. I tried in a block class to do it this way:
@Override
public void tick(BlockState p_225534_1_, ServerWorld world, BlockPos pos, Random p_225534_4_) {
super.tick(p_225534_1_, world, pos, p_225534_4_);
int radius = 10;
List<Entity> ent = world.getEntities(EntityType.PLAYER.create(world), new AxisAlignedBB(pos.getX() - radius, pos.getY() - radius, pos.getZ() - radius, pos.getX() + radius, pos.getY() + radius, pos.getZ() + radius));
for (Entity n : ent) {
if (n instanceof PlayerEntity) {
PlayerEntity pl = (PlayerEntity) n;
pl.addEffect(new EffectInstance(Effects.BLINDNESS, 150));
}
}
}
But for some reason the "tick" function is called only when a random tick hits this block. In fact, I need to call this function all the time, but I cannot implement it. Thank you in advance