FormInteractionFix

FormInteractionFix

por poggit-archive
No disponible

Incompatible con la versión actual de PocketMine-MP — Could not load plugin 'FormInteractionFix': Incompatible API version (plugin requires one of: 4.0.0) · Probado en PocketMine-MP 5.50.0 (PHP 8.4.27).

VariosHerramientaspocketmine
4visitas
0descargas

Form Interaction Fix

Interaction spam

Explanation

Interaction spam is often a problem for players who use the mouse as their input. Try to interact (right-click) while facing a block. You may notice that PlayerInteractEvent is called many times in a short period. If a plugin opens its form on interaction, these players will see the form opens more than once.

Problem demo (before installing)

Before installing FormInteractionFix

Fix demo (after installing)

After installing FormInteractionFix

The fix

This plugin blocks interaction when a form opens. (NPC dialogues will be supported soon™.) By listening for packets and cancelling interaction events after a form is sent to the player. Until the player responds to (or closes) it.

Potential problems

This plugin relies on packets very much. And can malfunction if a client does not respond with the correct packet. For instance, official clients would not open a form in that the JSON of its packet is invalid. Eventually, the client can neither react to any form nor make any interaction.

Inclusiveness

As this plugin is driven by packets, it works for all forms, no matter which plugin creates them.

Disclaimer

This plugin cannot prevent any malicious attacks or behaviours.

Developer note

Depending on this plugin

Your plugin can depend on this plugin instead of verbosely implementing an interaction cool down on your own.

await-generator & await-std

Both were made by @SOF3:

await-generator: brings async/awaits to PHP. (Version ^3.4.3 is required because it fixes the Traverser error.)

await-std: enables the use of PM API in async/await style, such as tasks and events.

Do not worry when you see unusual code like while (true) and yield. It will not block the thread. Instead, yield can pause the code flow and make it behaves like concurrency.

IntegratedTest.php

Performs integrated tests with FakePlayer by Muqsit. Please refer to the doc comments in it for more details.

PHPStan & PHP-CS-Fixer

Common PHP dev tools:

PHPStan: lint. (static code check.)

PHP-CS-Fixer: fixes code standard. (Format code, replace FQCN with use, etc... Do not get confused with PHP_CodeSniffer!)

Credit

  • Icon from https://windows93.net

  • Thanks @alvin0319 for providing me environment to perform live tests and record the demos.