Skip to content

Commit 133468b

Browse files
committed
Added a way to disable nametag cosmetics
1 parent ae22eec commit 133468b

File tree

13 files changed

+282
-3
lines changed

13 files changed

+282
-3
lines changed

bukkit-1.17/src/main/java/net/badlion/bukkitapi/BukkitBadlionPlugin.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.badlion.bukkitapi;
22

3+
import net.badlion.bukkitapi.cosmetics.CosmeticManager;
34
import net.badlion.bukkitapi.listener.PlayerListener;
45
import net.badlion.bukkitapi.timers.TimerApi;
56
import net.badlion.bukkitapi.timers.TimerApiImpl;
@@ -15,13 +16,16 @@ public class BukkitBadlionPlugin extends JavaPlugin {
1516
private final BukkitPluginMessageSender messageSender;
1617
private final TimerApiImpl timerApi;
1718
private final WaypointManager waypointManager;
19+
private final CosmeticManager cosmeticManager;
1820

1921
public BukkitBadlionPlugin() {
2022
this.badlionApi = new BukkitBadlionApi(this);
2123
this.messageSender = new BukkitPluginMessageSender(this);
2224
this.timerApi = new TimerApiImpl(this);
2325
this.waypointManager = new WaypointManager(this);
2426
this.badlionApi.setWaypointManager(this.waypointManager);
27+
this.cosmeticManager = new CosmeticManager();
28+
this.badlionApi.setCosmeticManager(this.cosmeticManager);
2529
}
2630

2731
@Override
@@ -45,8 +49,7 @@ public void onEnable() {
4549
// Only register the listener if the config loads successfully
4650
this.getServer().getPluginManager().registerEvents(new PlayerListener(this), this);
4751
this.getServer().getPluginManager().registerEvents(this.waypointManager, this);
48-
49-
this.getLogger().log(Level.INFO, "Successfully setup BadlionClientModAPI plugin.");
52+
this.getServer().getPluginManager().registerEvents(this.cosmeticManager, this);
5053

5154
this.getServer().getScheduler().runTaskTimer(this, new Runnable() {
5255
@Override
@@ -62,6 +65,8 @@ public void run() {
6265
}
6366
}, 60L, 60L);
6467

68+
this.getLogger().log(Level.INFO, "Successfully setup BadlionClientModAPI plugin.");
69+
6570
} catch (IOException e) {
6671
this.getLogger().log(Level.SEVERE, "Error with config for BadlionClientModAPI plugin.");
6772
e.printStackTrace();
@@ -88,4 +93,8 @@ public TimerApiImpl getTimerApi() {
8893
public WaypointManager getWaypointManager() {
8994
return this.waypointManager;
9095
}
96+
97+
public CosmeticManager getCosmeticManager() {
98+
return this.cosmeticManager;
99+
}
91100
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package net.badlion.bukkitapi.cosmetics;
2+
3+
import com.google.gson.JsonArray;
4+
import com.google.gson.JsonObject;
5+
import net.badlion.modapicommon.AbstractBadlionApi;
6+
import net.badlion.modapicommon.utility.AbstractCosmeticManager;
7+
import org.bukkit.entity.Player;
8+
import org.bukkit.event.EventHandler;
9+
import org.bukkit.event.Listener;
10+
import org.bukkit.event.player.PlayerQuitEvent;
11+
12+
import java.util.Collections;
13+
import java.util.Set;
14+
import java.util.UUID;
15+
import java.util.concurrent.ConcurrentHashMap;
16+
17+
public class CosmeticManager extends AbstractCosmeticManager implements Listener {
18+
private final Set<UUID> disabledNametags = Collections.newSetFromMap(new ConcurrentHashMap<>());
19+
20+
@Override
21+
public void disableNametagCosmetics(UUID uuid) {
22+
if (!this.disabledNametags.add(uuid)) {
23+
return;
24+
}
25+
26+
JsonObject data = this.getDisabledCosmeticsData(uuid, true, "nametag");
27+
28+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendData("cosmetics", data);
29+
}
30+
31+
@Override
32+
public void enableNametagCosmetics(UUID uuid) {
33+
if (!this.disabledNametags.remove(uuid)) {
34+
return;
35+
}
36+
37+
JsonObject data = this.getDisabledCosmeticsData(uuid, false, "nametag");
38+
39+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendData("cosmetics", data);
40+
}
41+
42+
@EventHandler
43+
public void onPlayerQuit(PlayerQuitEvent event) {
44+
this.enableNametagCosmetics(event.getPlayer().getUniqueId());
45+
}
46+
47+
public void onPlayerJoin(Player player) {
48+
if (!this.disabledNametags.isEmpty()) {
49+
for (UUID uuid : this.disabledNametags) {
50+
JsonObject data = this.getDisabledCosmeticsData(uuid, false, "nametag");
51+
52+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendData(player.getUniqueId(), "cosmetics", data);
53+
}
54+
}
55+
}
56+
57+
private JsonObject getDisabledCosmeticsData(UUID uuid, boolean disabled, String... cosmeticTypes) {
58+
final JsonObject data = new JsonObject();
59+
final JsonArray array = new JsonArray();
60+
61+
for (String cosmeticType : cosmeticTypes) {
62+
array.add(cosmeticType);
63+
}
64+
65+
data.addProperty("type", "disable_cosmetics");
66+
data.add("cosmeticTypes", array);
67+
data.addProperty("disable", disabled);
68+
data.addProperty("uuid", uuid.toString());
69+
70+
return data;
71+
}
72+
}

bukkit-1.17/src/main/java/net/badlion/bukkitapi/listener/PlayerListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public void onPlayerJoin(PlayerJoinEvent event) {
3535
this.plugin.getMessageSender().sendPluginMessagePacket(player, TimerApi.CHANNEL_NAME, "CHANGE_WORLD|{}".getBytes(StandardCharsets.UTF_8));
3636

3737
this.plugin.getWaypointManager().onPlayerJoin(player);
38+
this.plugin.getCosmeticManager().onPlayerJoin(player);
3839

3940
Bukkit.getScheduler().runTaskLater(this.plugin, () -> this.plugin.getWaypointManager().sendWaypointsToClient(player, player.getWorld()), 40);
4041
}

bukkit/src/main/java/net/badlion/bukkitapi/BukkitBadlionPlugin.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.badlion.bukkitapi;
22

3+
import net.badlion.bukkitapi.cosmetics.CosmeticManager;
34
import net.badlion.bukkitapi.listener.PlayerListener;
45
import net.badlion.bukkitapi.timers.TimerApi;
56
import net.badlion.bukkitapi.timers.TimerApiImpl;
@@ -15,13 +16,16 @@ public class BukkitBadlionPlugin extends JavaPlugin {
1516
private final BukkitPluginMessageSender messageSender;
1617
private final TimerApiImpl timerApi;
1718
private final WaypointManager waypointManager;
19+
private final CosmeticManager cosmeticManager;
1820

1921
public BukkitBadlionPlugin() {
2022
this.badlionApi = new BukkitBadlionApi(this);
2123
this.messageSender = new BukkitPluginMessageSender(this);
2224
this.timerApi = new TimerApiImpl(this);
2325
this.waypointManager = new WaypointManager(this);
2426
this.badlionApi.setWaypointManager(this.waypointManager);
27+
this.cosmeticManager = new CosmeticManager();
28+
this.badlionApi.setCosmeticManager(this.cosmeticManager);
2529
}
2630

2731
@Override
@@ -45,6 +49,7 @@ public void onEnable() {
4549
// Only register the listener if the config loads successfully
4650
this.getServer().getPluginManager().registerEvents(new PlayerListener(this), this);
4751
this.getServer().getPluginManager().registerEvents(this.waypointManager, this);
52+
this.getServer().getPluginManager().registerEvents(this.cosmeticManager, this);
4853

4954
this.getServer().getScheduler().runTaskTimer(this, new Runnable() {
5055
@Override
@@ -88,4 +93,8 @@ public TimerApiImpl getTimerApi() {
8893
public WaypointManager getWaypointManager() {
8994
return this.waypointManager;
9095
}
96+
97+
public CosmeticManager getCosmeticManager() {
98+
return this.cosmeticManager;
99+
}
91100
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
package net.badlion.bukkitapi.cosmetics;
2+
3+
import com.google.gson.JsonArray;
4+
import com.google.gson.JsonObject;
5+
import net.badlion.modapicommon.AbstractBadlionApi;
6+
import net.badlion.modapicommon.utility.AbstractCosmeticManager;
7+
import org.bukkit.entity.Player;
8+
import org.bukkit.event.EventHandler;
9+
import org.bukkit.event.Listener;
10+
import org.bukkit.event.player.PlayerQuitEvent;
11+
12+
import java.util.Collections;
13+
import java.util.Set;
14+
import java.util.UUID;
15+
import java.util.concurrent.ConcurrentHashMap;
16+
17+
public class CosmeticManager extends AbstractCosmeticManager implements Listener {
18+
private final Set<UUID> disabledNametags = Collections.newSetFromMap(new ConcurrentHashMap<>());
19+
20+
@Override
21+
public void disableNametagCosmetics(UUID uuid) {
22+
if (!this.disabledNametags.add(uuid)) {
23+
return;
24+
}
25+
26+
JsonObject data = this.getDisabledCosmeticsData(uuid, true, "nametag");
27+
28+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendData("cosmetics", data);
29+
}
30+
31+
@Override
32+
public void enableNametagCosmetics(UUID uuid) {
33+
if (!this.disabledNametags.remove(uuid)) {
34+
return;
35+
}
36+
37+
JsonObject data = this.getDisabledCosmeticsData(uuid, false, "nametag");
38+
39+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendData("cosmetics", data);
40+
}
41+
42+
@EventHandler
43+
public void onPlayerQuit(PlayerQuitEvent event) {
44+
this.enableNametagCosmetics(event.getPlayer().getUniqueId());
45+
}
46+
47+
public void onPlayerJoin(Player player) {
48+
if (!this.disabledNametags.isEmpty()) {
49+
for (UUID uuid : this.disabledNametags) {
50+
JsonObject data = this.getDisabledCosmeticsData(uuid, false, "nametag");
51+
52+
AbstractBadlionApi.getInstance().getPluginMessageSender().sendData(player.getUniqueId(), "cosmetics", data);
53+
}
54+
}
55+
}
56+
57+
private JsonObject getDisabledCosmeticsData(UUID uuid, boolean disabled, String... cosmeticTypes) {
58+
final JsonObject data = new JsonObject();
59+
final JsonArray array = new JsonArray();
60+
61+
for (String cosmeticType : cosmeticTypes) {
62+
array.add(cosmeticType);
63+
}
64+
65+
data.addProperty("type", "disable_cosmetics");
66+
data.add("cosmeticTypes", array);
67+
data.addProperty("disable", disabled);
68+
data.addProperty("uuid", uuid.toString());
69+
70+
return data;
71+
}
72+
}

bukkit/src/main/java/net/badlion/bukkitapi/listener/PlayerListener.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public void onPlayerJoin(PlayerJoinEvent event) {
3636
this.plugin.getMessageSender().sendPluginMessagePacket(player, TimerApi.CHANNEL_NAME, "CHANGE_WORLD|{}".getBytes(StandardCharsets.UTF_8));
3737

3838
this.plugin.getWaypointManager().onPlayerJoin(player);
39+
this.plugin.getCosmeticManager().onPlayerJoin(player);
3940

4041
Bukkit.getScheduler().runTaskLater(this.plugin, () -> this.plugin.getWaypointManager().sendWaypointsToClient(player, player.getWorld()), 40);
4142
}

bungee/src/main/java/net/badlion/bungeeapi/BungeeBadlionPlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package net.badlion.bungeeapi;
22

3+
import net.badlion.bungeeapi.cosmetics.UnsupportedCosmeticManager;
34
import net.badlion.bungeeapi.listener.PlayerListener;
45
import net.badlion.bungeeapi.waypoints.UnsupportedWaypointManager;
56
import net.md_5.bungee.api.plugin.Plugin;
@@ -17,6 +18,7 @@ public BungeeBadlionPlugin() {
1718
this.badlionApi = new BungeeBadlionApi(this);
1819
this.messageSender = new BungeePluginMessageSender(this);
1920
this.badlionApi.setWaypointManager(new UnsupportedWaypointManager());
21+
this.badlionApi.setCosmeticManager(new UnsupportedCosmeticManager());
2022
}
2123

2224
@Override
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package net.badlion.bungeeapi.cosmetics;
2+
3+
import net.badlion.modapicommon.utility.AbstractCosmeticManager;
4+
5+
import java.util.UUID;
6+
7+
public class UnsupportedCosmeticManager extends AbstractCosmeticManager {
8+
@Override
9+
public void disableNametagCosmetics(UUID uuid) {
10+
throw new UnsupportedOperationException("Cosmetic settings hooks are not supported on bungee!");
11+
}
12+
13+
@Override
14+
public void enableNametagCosmetics(UUID uuid) {
15+
throw new UnsupportedOperationException("Cosmetic settings hooks are not supported on bungee!");
16+
}
17+
}

modapi-common/src/main/java/net/badlion/modapicommon/AbstractBadlionApi.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
5+
import net.badlion.modapicommon.utility.AbstractCosmeticManager;
56
import net.badlion.modapicommon.utility.AbstractWaypointManager;
67

78
import java.io.File;
@@ -14,8 +15,9 @@ public abstract class AbstractBadlionApi {
1415
private static AbstractBadlionApi instance;
1516

1617
private AbstractWaypointManager waypointManager;
18+
private AbstractCosmeticManager cosmeticManager;
1719

18-
public AbstractBadlionApi() {
20+
protected AbstractBadlionApi() {
1921
AbstractBadlionApi.instance = this;
2022
}
2123

@@ -53,6 +55,25 @@ public AbstractWaypointManager getWaypointManager() {
5355
return this.waypointManager;
5456
}
5557

58+
/**
59+
* Sets the implementation for the {@link AbstractCosmeticManager} class.
60+
*/
61+
public void setCosmeticManager(AbstractCosmeticManager cosmeticManager) {
62+
this.cosmeticManager = cosmeticManager;
63+
}
64+
65+
/**
66+
* Returns the implementation for the {@link AbstractCosmeticManager} class.
67+
*/
68+
public AbstractCosmeticManager getCosmeticManager() {
69+
return this.cosmeticManager;
70+
}
71+
72+
/**
73+
* Returns the Badlion Api instance.
74+
*
75+
* @return The current Badlion Api instance
76+
*/
5677
public static AbstractBadlionApi getInstance() {
5778
return AbstractBadlionApi.instance;
5879
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package net.badlion.modapicommon.cosmetics;
2+
3+
import net.badlion.modapicommon.AbstractBadlionApi;
4+
5+
import java.util.UUID;
6+
7+
/**
8+
* Class with API Hooks for our cosmetics.
9+
*/
10+
public class Cosmetics {
11+
/**
12+
* Disables nametag cosmetics for a certain user.
13+
* Could be used in a /nick implementation to remove partner / blc staff icons or promotional nametags.
14+
* Custom insider nametags (like BLC staff or partner) will be replaced by the default insider nametag.
15+
*
16+
* @param uuid The player UUID
17+
*/
18+
public static void disableNametagCosmetics(UUID uuid) {
19+
AbstractBadlionApi.getInstance().getCosmeticManager().disableNametagCosmetics(uuid);
20+
}
21+
22+
/**
23+
* Re-enables nametag cosmetics for a certain user, previously disabled by {@link Cosmetics#disableNametagCosmetics(UUID)}.
24+
*
25+
* @param uuid The player UUID
26+
*/
27+
public static void enableNametagCosmetics(UUID uuid) {
28+
AbstractBadlionApi.getInstance().getCosmeticManager().enableNametagCosmetics(uuid);
29+
}
30+
}

0 commit comments

Comments
 (0)