![](assets/ModernDisguise.png)
## 💬 Description
ModernDisguise is a free lightweight open-source high quality library to help you add a disguise system to your
minecraft plugin
Here's the [SpigotMC Forum](https://www.spigotmc.org/threads/moderndisguise-a-lightweight-free-open-source-disguise-library.582167/)
## 😎 Features
You can change the player's:
- Name (Server side)
- Skin (Server side)
- EntityType (up to 60 entities) (Client side & other players only can see it)
## ✅ Supported versions
- 1.8.8 (1_8_R3)
- 1.9.4 (1_9_R2)
- 1.10.x (1_10_R1)
- 1.11.x (1_11_R1)
- 1.12.x (1_12_R1)
- 1.13.x (1_13_R1, 1_13_R2)
- 1.14.x (1_14_R1)
- 1.15.x (1_15_R1)
- 1.16.x (1_16_R1, 1_16_R2, 1_16_R3)
- 1.17.x (1_17_R1)
- 1.18.x (1_18_R1, 1_18_R2)
- 1.19.x (1_19_R1, 1_19_R2, 1_19_R3)
## ⚠️ WARNING
On versions that support Mojang Chat-Reports this plugin will add a ChatColor#RESET to the end of every message
to disable Mojang's Chat-Report feature.
## ➕ Add to your project
### Maven
Add this repo to your repositories:
```xml
gravemc-repo
https://repo.gravemc.net/releases/
```
and then add this dependancy:
```xml
dev.iiahmed
ModernDisguise
1.8
compile
```
and you can relocate them as well, here's an example maven-shade-plugin config:
```xml
*:*
META-INF/
dev.iiahmed.disguise
your.own.package.disguise
```
### Gradle
Add this repo to your repositories block:
```groovy
repositories {
maven {
name = "gravemc-repo"
url = "https://repo.gravemc.net/releases/"
}
}
```
and now add dependency:
```groovy
dependencies {
implementation 'dev.iiahmed:ModernDisguise:1.8'
}
```
## 🧑💻 Usage
Here's an example usage of the API (easiest):
```java
import dev.iiahmed.disguise.*;
public class ExampleClass implements Listener {
private final DisguiseProvider provider = DisguiseManager.getProvider();
public ExampleClass() {
DisguiseManager.setPlugin(ExamplePlugin.getInstance());
// this is optional (it registers a PlaceholderAPI expansion for you)
// placeholders are: %nick_name%, %nick_realname%, %nick_is_nicked% (%nick_is_disguised%)
DisguiseManager.registerExpantion();
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
Disguise disguise = Disguise.builder()
// the boolean is whether this is a fake nickname or not
.setName("BillBobbyBob", false)
// you could as well use Disguise.Builder#setSkin(textures, signature)
// which is more recommended
// it's recommended to run this async since #setSkin from an online API will block the mainthread
.setSkin(SkinAPI.MOJANG_UUID, "example-uuid")
// this will change the player into a zombie for others only
.setEntityType(EntityType.ZOMBIE)
.build();
provider.disguise(player, disguise);
}
}
```
Here's an advanced way of using it:
```java
import dev.iiahmed.disguise.*;
public class ExampleClass implements Listener {
private final DisguiseProvider provider = DisguiseManager.getProvider();
public ExampleClass() {
DisguiseManager.setPlugin(ExamplePlugin.getInstance());
// this is optional (it registers a PlaceholderAPI expansion for you)
// placeholders are: %nick_name%, %nick_realname%, %nick_is_nicked% (%nick_is_disguised%)
DisguiseManager.registerExpantion();
}
@EventHandler
public void onJoin(PlayerJoinEvent event) {
Player player = event.getPlayer();
Disguise disguise = Disguise.builder()
// the boolean is whether this is a fake nickname or not
.setName("BillBobbyBob", false)
// you could as well use Disguise.Builder#setSkin(textures, signature)
// which is more recommended
// it's recommended to run this async since #setSkin from API could block the mainthread
.setSkin(SkinAPI.MOJANG_UUID, "example-uuid")
// this will change the player into a zombie for others only
.setEntityType(EntityType.ZOMBIE)
.build();
DisguiseResponse response = provider.disguise(player, disguise);
// there are 8 responses other than DisguiseResponse#SUCCESS
switch (response) {
case SUCCESS -> player.sendMessage("Disguise is successful.");
case FAIL_NAME_ALREADY_ONLINE -> player.sendMessage("There's already an online player with that name.");
default -> player.sendMessage("Disguise is unsuccessful with the reason " + response.toString());
}
}
}
```
There's way more to it but I'd rather you figure it out on your own by checking the DisguiseProvider class :)
## 🏗️ Building
###### 1- Building Spigot Versions
All these versions have to be built using Spigot's BuildTools
- 1.8.8
- 1.9.4
- 1.10.2
- 1.11.2
- 1.12.2
- 1.13, 1.13.2
- 1.14.4
- 1.15.2
- 1.16.1, 1.16.3, 1.16.5
Versions from now-on should be built with the ```--remapped``` flag
- 1.17.1
- 1.18.1, 1.18.2
- 1.19.2, 1.19.3, 1.19.4
###### 2- Cloning
You can either clone the repository using the famous ```git clone``` command or use your IDE's clone feature
Congratulations! Now you can build ModernDisguise with the command ```mvn clean install```
## 🪪 License
This project is licensed under the [GPL-3.0 License](LICENSE.md)
## ☀️ Credits
Shoutout to those people for helping me test this project and helping me find every single bug
- [Bermine](https://github.com/Bermiin)
- [Timury](https://github.com/MrKotex)
- [noobi](https://github.com/c0dingnoobi)
And Thanks JetBrains for providing me an Open-Source development tools License ❤️
![](assets/JetBrains.png)