/** * PlayerInteractEvent is fired when a player interacts in some way. * All subclasses are fired on {@link MinecraftForge#EVENT_BUS}. * See the individual documentation on each subevent for more details. * * Minecraft's right click interaction is structured clientside as a "stream", where a stream of interactions are * all attempted until one of them succeeds. * This stream, in general, flows in this order for all hands, until one succeeds: * ((EntityInteractSpecific -> EntityInteract) OR (RightClickBlock)) -> (RightClickItem OR RightClickEmpty) -> repeat for other hands... * * The stream "flows", following a '->', whenever a respective event is cancelled or the underlying operation (as noted in each event) * returns some sort of status indicating that nothing happened (usually {@code false} or {@link net.minecraft.util.EnumActionResult#PASS}. * If the underlying operation performed some meaningful action then the stream is terminated and interaction ends. * * However, there may be situations where you need to terminate the stream, yet do not want the underlying operation to run. * This is what the {@link #externalResult} field is for. * If this field is {@link EnumActionResult#PASS}, then the underlying operation is called and its results used to continue processing. * However, if this field is not {@link EnumActionResult#PASS}, then the underlying operation is skipped and this field is directly used to continue processing. * * Unlike the client, the server side has no such "stream", as everything is done in the handlers of discrete packets. * As such, canceling an event server side simply causes the resulting interactions to not occur. **/