Setting block creator issue

I am making a plugin that needs to know if a block was generated naturally or placed later.
I was trying to use the blockSnapshot.getCreator() method, but it doesnt work anymore when a block was moved by a piston or fell down (gravel, sand, etc). So i tried to set the creator by listening to ChangeBlockEvent.Place.

@Listener(order = Order.LATE)
public void onPiston(final ChangeBlockEvent.Place e, @First final Piston piston) {"Found Piston Movement!");

    e.getTransactions().forEach(trans -> trans.setCustom(BlockSnapshot.builder().from(trans.getFinal()).creator(e.getCause().first(Player.class).map(p -> p.getUniqueId()).orElse(this.uuid)).build()));

    e.getTransactions().forEach(trans -> trans.getOriginal().getLocation().ifPresent(loc -> loc.setBlock(BlockSnapshot.builder().from(trans.getFinal()).creator(e.getCause().first(Player.class).map(p -> p.getUniqueId()).orElse(this.uuid)).build().getState(), ServerUtils.getCause(super.getMMO().getContainer()))));

Both of these ways did not set the creator properly. Does anybody know how i can make this work?

You shouldn’t be setting the block directly in the event handler (with loc.setBlock). The sponge internals will handle that after the event listeners have finished doing their things.
Also, can you confirm your event handler is definitely getting called?

They listener worked, but the ways i tried here dont work. However i managed to get it working using world.setCreator(vector3i, uuid).

Sponge does not assign the creator of a block correctly when it is moved, either by piston or falling. This might be a bug.