A disguise API for Sponge.
To use the MasqueradeAPI in your project, you need to add it to your Maven/Gradle dependencies.
We suggest using jitpack.io to depend on the MasqueradeAPI like so:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.CrushedPixel</groupId>
<artifactId>MasqueradeAPI</artifactId>
<version>master-SNAPSHOT</version>
</dependency>
</dependencies>
To run a plugin that depends on the MasqueradeAPI, you need to install the MasqueradePlugin on your Sponge server.
The MasqueradePlugin registers a Sponge service that exposes an instance of Masquerades
, which can be used to retrieve instances of Masquerade
:
Optional<Masquerades> optional = Sponge.getServiceManager().provide(Masquerades.class);
if (optional.isPresent()) {
Masquerades masquerades = optional.get();
// use Masquerades
} else {
// the MasqueradesPlugin is not installed on the server
}
To mask a player, retrieve an instance of Masquerade
from Masquerades
and show it to other players.
For example, if you want to mask the Player as a Zombie and show the masquerade to all online players, do:
Masquerade masquerade = masquerades.fromType(EntityTypes.ZOMBIE, player);
for (Player p : Sponge.getServer().getOnlinePlayers()) {
// do not show the masquerade to the masked player itself
if (p == player) continue;
masquerade.maskTo(p);
}
The player now looks like a Zombie to all other online players on the server.
If you want to unmask the player again, you can either call Masquerade#unmaskTo(Player)
to unmask them to a specific player
or Masquerade#unmask()
to unmask them to everyone.
Note: The MasqueradePlugin itself does not handle Events like clients connecting and disconnecting - for an example implementation, please refer to MasqueradeCommand.
You can manipulate the Masquerade
's entity metadata using Sponge Key
s, for example to display a custom name for the fake entity:
masquerade.setData(Keys.DISPLAY_NAME, Text.of("Dinnerbone"));
masquerade.setData(Keys.CUSTOM_NAME_VISIBLE, true);
Please note that some Keys may not be applicable to a certain Masquerade
type or may not be implemented yet, in which case setData
will throw an IllegalArgumentException
.
Some metadata fields are automatically modified by the server,
for example Keys.IS_ABLAZE
will be modified if the masked player walks through fire.
You can easily disable this behaviour for each key separately:
masquerade.setValueChangeAllowed(Keys.IS_ABLAZE, false);
Now, the entity will only appear in flames when asked for by the plugin, and otherwise retain the current state.