diff --git a/api/build.gradle.kts b/api/build.gradle.kts
index c742b50..4ee56a9 100644
--- a/api/build.gradle.kts
+++ b/api/build.gradle.kts
@@ -1,4 +1,5 @@
dependencies {
+ implementation(project(":common"))
compileOnly("dev.folia:folia-api:1.20.1-R0.1-SNAPSHOT")
compileOnly("me.clip:placeholderapi:2.11.5")
}
\ No newline at end of file
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/manager/AdventureManager.java b/api/src/main/java/net/momirealms/customnameplates/api/manager/AdventureManager.java
index 7152e66..499547f 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/manager/AdventureManager.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/manager/AdventureManager.java
@@ -25,9 +25,9 @@ import org.bukkit.entity.Player;
public interface AdventureManager {
- net.momirealms.customnameplates.api.common.Key keyToKey(Key key);
+ net.momirealms.customnameplates.common.Key keyToKey(Key key);
- Key keyToKey(net.momirealms.customnameplates.api.common.Key key);
+ Key keyToKey(net.momirealms.customnameplates.common.Key key);
Object getIChatComponentFromMiniMessage(String text);
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/manager/NameplateManager.java b/api/src/main/java/net/momirealms/customnameplates/api/manager/NameplateManager.java
index 337c7ea..6521936 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/manager/NameplateManager.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/manager/NameplateManager.java
@@ -4,7 +4,7 @@ import net.momirealms.customnameplates.api.mechanic.nameplate.CachedNameplate;
import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate;
import net.momirealms.customnameplates.api.mechanic.nameplate.TagMode;
import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer;
-import net.momirealms.customnameplates.api.mechanic.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamColor;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/manager/TeamManager.java b/api/src/main/java/net/momirealms/customnameplates/api/manager/TeamManager.java
index 14e4721..cb9bbc4 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/manager/TeamManager.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/manager/TeamManager.java
@@ -1,8 +1,8 @@
package net.momirealms.customnameplates.api.manager;
import net.kyori.adventure.text.Component;
-import net.momirealms.customnameplates.api.mechanic.team.TeamColor;
-import net.momirealms.customnameplates.api.mechanic.team.TeamTagVisibility;
+import net.momirealms.customnameplates.common.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamTagVisibility;
import org.bukkit.entity.Player;
public interface TeamManager {
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/manager/WidthManager.java b/api/src/main/java/net/momirealms/customnameplates/api/manager/WidthManager.java
index 751d34c..f20c5be 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/manager/WidthManager.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/manager/WidthManager.java
@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.api.manager;
-import net.momirealms.customnameplates.api.common.Key;
import net.momirealms.customnameplates.api.mechanic.font.FontData;
+import net.momirealms.customnameplates.common.Key;
import org.jetbrains.annotations.Nullable;
public interface WidthManager {
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/nameplate/CachedNameplate.java b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/nameplate/CachedNameplate.java
index 40c1e6b..4dcb787 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/nameplate/CachedNameplate.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/nameplate/CachedNameplate.java
@@ -1,6 +1,6 @@
package net.momirealms.customnameplates.api.mechanic.nameplate;
-import net.momirealms.customnameplates.api.mechanic.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamColor;
public class CachedNameplate {
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/nameplate/Nameplate.java b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/nameplate/Nameplate.java
index 4b21f81..9b5c9c4 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/nameplate/Nameplate.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/nameplate/Nameplate.java
@@ -2,7 +2,7 @@ package net.momirealms.customnameplates.api.mechanic.nameplate;
import net.momirealms.customnameplates.api.mechanic.character.ConfiguredChar;
import net.momirealms.customnameplates.api.mechanic.font.OffsetFont;
-import net.momirealms.customnameplates.api.mechanic.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamColor;
import net.momirealms.customnameplates.api.util.FontUtils;
public class Nameplate {
@@ -86,6 +86,7 @@ public class Nameplate {
public String getPrefix(int textWidth) {
StringBuilder stringBuilder = new StringBuilder();
+ stringBuilder.append("<#FEFEFE>");
stringBuilder.append(OffsetFont.getShortestNegChars(textWidth + left.getWidth() + 1));
stringBuilder.append(left.getCharacter());
stringBuilder.append(OffsetFont.NEG_1.getCharacter());
@@ -97,10 +98,13 @@ public class Nameplate {
}
stringBuilder.append(OffsetFont.getShortestNegChars(middle.getWidth() - (textWidth+2) % middle.getWidth() + 1)); // +1
}
+ stringBuilder.append("<#FDFEFE>");
stringBuilder.append(middle.getCharacter());
+ stringBuilder.append("#FDFEFE>");
stringBuilder.append(OffsetFont.NEG_1.getCharacter());
stringBuilder.append(right.getCharacter());
- stringBuilder.append(OffsetFont.getShortestNegChars(textWidth + right.getWidth() + 1)); // -1
+ stringBuilder.append("#FEFEFE>");
+ stringBuilder.append(OffsetFont.getShortestNegChars(textWidth + right.getWidth() + 1)); // -1;
return stringBuilder.toString();
}
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/placeholder/ConditionalText.java b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/placeholder/ConditionalText.java
index bf64792..c25186d 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/placeholder/ConditionalText.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/placeholder/ConditionalText.java
@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.api.mechanic.placeholder;
import me.clip.placeholderapi.PlaceholderAPI;
-import net.momirealms.customnameplates.api.common.Pair;
+import net.momirealms.customnameplates.common.Pair;
import net.momirealms.customnameplates.api.manager.RequirementManager;
import net.momirealms.customnameplates.api.requirement.Condition;
import net.momirealms.customnameplates.api.requirement.Requirement;
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/tag/team/TeamPlayer.java b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/tag/team/TeamPlayer.java
index b4813e7..e9b53c9 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/tag/team/TeamPlayer.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/tag/team/TeamPlayer.java
@@ -6,8 +6,8 @@ import net.momirealms.customnameplates.api.manager.TeamTagManager;
import net.momirealms.customnameplates.api.mechanic.misc.ViewerText;
import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate;
import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer;
-import net.momirealms.customnameplates.api.mechanic.team.TeamColor;
-import net.momirealms.customnameplates.api.mechanic.team.TeamTagVisibility;
+import net.momirealms.customnameplates.common.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamTagVisibility;
import org.bukkit.entity.Player;
import java.util.Vector;
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/tag/unlimited/UnlimitedPlayer.java b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/tag/unlimited/UnlimitedPlayer.java
index dd04925..72b812a 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/tag/unlimited/UnlimitedPlayer.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/tag/unlimited/UnlimitedPlayer.java
@@ -5,8 +5,8 @@ import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
import net.momirealms.customnameplates.api.manager.UnlimitedTagManager;
import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate;
import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer;
-import net.momirealms.customnameplates.api.mechanic.team.TeamColor;
-import net.momirealms.customnameplates.api.mechanic.team.TeamTagVisibility;
+import net.momirealms.customnameplates.common.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamTagVisibility;
import org.bukkit.entity.Player;
import org.bukkit.entity.Pose;
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamCreatePacket.java b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamCreatePacket.java
index d1cede2..2d8161e 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamCreatePacket.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamCreatePacket.java
@@ -1,6 +1,9 @@
package net.momirealms.customnameplates.api.mechanic.team;
import net.kyori.adventure.text.Component;
+import net.momirealms.customnameplates.common.team.TeamCollisionRule;
+import net.momirealms.customnameplates.common.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamTagVisibility;
import java.util.Collection;
import java.util.Collections;
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamUpdatePacket.java b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamUpdatePacket.java
index 4b53360..7eac751 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamUpdatePacket.java
+++ b/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamUpdatePacket.java
@@ -1,6 +1,9 @@
package net.momirealms.customnameplates.api.mechanic.team;
import net.kyori.adventure.text.Component;
+import net.momirealms.customnameplates.common.team.TeamCollisionRule;
+import net.momirealms.customnameplates.common.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamTagVisibility;
public class TeamUpdatePacket {
diff --git a/build.gradle.kts b/build.gradle.kts
index 1241825..e60677c 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -36,6 +36,7 @@ allprojects {
maven("https://repo.auxilor.io/repository/maven-public/")
maven("https://betonquest.org/nexus/repository/betonquest/")
maven("https://repo.william278.net/releases/")
+ maven("https://repo.william278.net/velocity/")
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
maven("https://repo.minebench.de/")
maven("https://repo.xenondevs.xyz/releases/")
diff --git a/common/.gitignore b/common/.gitignore
new file mode 100644
index 0000000..b63da45
--- /dev/null
+++ b/common/.gitignore
@@ -0,0 +1,42 @@
+.gradle
+build/
+!gradle/wrapper/gradle-wrapper.jar
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### IntelliJ IDEA ###
+.idea/modules.xml
+.idea/jarRepositories.xml
+.idea/compiler.xml
+.idea/libraries/
+*.iws
+*.iml
+*.ipr
+out/
+!**/src/main/**/out/
+!**/src/test/**/out/
+
+### Eclipse ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+bin/
+!**/src/main/**/bin/
+!**/src/test/**/bin/
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+
+### VS Code ###
+.vscode/
+
+### Mac OS ###
+.DS_Store
\ No newline at end of file
diff --git a/common/build.gradle.kts b/common/build.gradle.kts
new file mode 100644
index 0000000..8254100
--- /dev/null
+++ b/common/build.gradle.kts
@@ -0,0 +1,3 @@
+dependencies {
+ compileOnly("org.jetbrains:annotations:24.1.0")
+}
\ No newline at end of file
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/common/Key.java b/common/src/main/java/net/momirealms/customnameplates/common/Key.java
similarity index 96%
rename from api/src/main/java/net/momirealms/customnameplates/api/common/Key.java
rename to common/src/main/java/net/momirealms/customnameplates/common/Key.java
index 52829e1..4a27e2f 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/common/Key.java
+++ b/common/src/main/java/net/momirealms/customnameplates/common/Key.java
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package net.momirealms.customnameplates.api.common;
+package net.momirealms.customnameplates.common;
public record Key(String namespace, String value) {
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/common/Pair.java b/common/src/main/java/net/momirealms/customnameplates/common/Pair.java
similarity index 94%
rename from api/src/main/java/net/momirealms/customnameplates/api/common/Pair.java
rename to common/src/main/java/net/momirealms/customnameplates/common/Pair.java
index 3e5f923..574b448 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/common/Pair.java
+++ b/common/src/main/java/net/momirealms/customnameplates/common/Pair.java
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package net.momirealms.customnameplates.api.common;
+package net.momirealms.customnameplates.common;
public record Pair(L left, R right) {
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/common/SimpleLocation.java b/common/src/main/java/net/momirealms/customnameplates/common/SimpleLocation.java
similarity index 87%
rename from api/src/main/java/net/momirealms/customnameplates/api/common/SimpleLocation.java
rename to common/src/main/java/net/momirealms/customnameplates/common/SimpleLocation.java
index 1102057..5eacfb3 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/common/SimpleLocation.java
+++ b/common/src/main/java/net/momirealms/customnameplates/common/SimpleLocation.java
@@ -15,9 +15,7 @@
* along with this program. If not, see .
*/
-package net.momirealms.customnameplates.api.common;
-
-import org.bukkit.Location;
+package net.momirealms.customnameplates.common;
import java.util.Objects;
@@ -56,8 +54,4 @@ public record SimpleLocation(String worldName, int x, int y, int z) {
hash = 19 * hash + (int) (Double.doubleToLongBits(this.z) ^ (Double.doubleToLongBits(this.z) >>> 32));
return hash;
}
-
- public static SimpleLocation getByBukkitLocation(Location location) {
- return new SimpleLocation(location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ());
- }
}
\ No newline at end of file
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/common/Tuple.java b/common/src/main/java/net/momirealms/customnameplates/common/Tuple.java
similarity index 96%
rename from api/src/main/java/net/momirealms/customnameplates/api/common/Tuple.java
rename to common/src/main/java/net/momirealms/customnameplates/common/Tuple.java
index c1299d8..a1a2876 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/common/Tuple.java
+++ b/common/src/main/java/net/momirealms/customnameplates/common/Tuple.java
@@ -15,7 +15,7 @@
* along with this program. If not, see .
*/
-package net.momirealms.customnameplates.api.common;
+package net.momirealms.customnameplates.common;
public class Tuple {
diff --git a/common/src/main/java/net/momirealms/customnameplates/common/message/MessageType.java b/common/src/main/java/net/momirealms/customnameplates/common/message/MessageType.java
new file mode 100644
index 0000000..a828e13
--- /dev/null
+++ b/common/src/main/java/net/momirealms/customnameplates/common/message/MessageType.java
@@ -0,0 +1,8 @@
+package net.momirealms.customnameplates.common.message;
+
+public class MessageType {
+
+ public static final String CREATE = "0";
+ public static final String REMOVE = "1";
+ public static final String UPDATE = "2";
+}
\ No newline at end of file
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamCollisionRule.java b/common/src/main/java/net/momirealms/customnameplates/common/team/TeamCollisionRule.java
similarity index 91%
rename from api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamCollisionRule.java
rename to common/src/main/java/net/momirealms/customnameplates/common/team/TeamCollisionRule.java
index 341ce87..05329f3 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamCollisionRule.java
+++ b/common/src/main/java/net/momirealms/customnameplates/common/team/TeamCollisionRule.java
@@ -1,4 +1,4 @@
-package net.momirealms.customnameplates.api.mechanic.team;
+package net.momirealms.customnameplates.common.team;
import org.jetbrains.annotations.NotNull;
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamColor.java b/common/src/main/java/net/momirealms/customnameplates/common/team/TeamColor.java
similarity index 87%
rename from api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamColor.java
rename to common/src/main/java/net/momirealms/customnameplates/common/team/TeamColor.java
index fb20fdf..b629d2a 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamColor.java
+++ b/common/src/main/java/net/momirealms/customnameplates/common/team/TeamColor.java
@@ -1,4 +1,4 @@
-package net.momirealms.customnameplates.api.mechanic.team;
+package net.momirealms.customnameplates.common.team;
import java.util.Locale;
diff --git a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamTagVisibility.java b/common/src/main/java/net/momirealms/customnameplates/common/team/TeamTagVisibility.java
similarity index 91%
rename from api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamTagVisibility.java
rename to common/src/main/java/net/momirealms/customnameplates/common/team/TeamTagVisibility.java
index 421d983..e74d9ea 100644
--- a/api/src/main/java/net/momirealms/customnameplates/api/mechanic/team/TeamTagVisibility.java
+++ b/common/src/main/java/net/momirealms/customnameplates/common/team/TeamTagVisibility.java
@@ -1,4 +1,4 @@
-package net.momirealms.customnameplates.api.mechanic.team;
+package net.momirealms.customnameplates.common.team;
import org.jetbrains.annotations.NotNull;
diff --git a/paper/build.gradle.kts b/paper/build.gradle.kts
index 3c4ef7d..77c157c 100644
--- a/paper/build.gradle.kts
+++ b/paper/build.gradle.kts
@@ -39,6 +39,7 @@ dependencies {
// api module
implementation(project(":api"))
+ implementation(project(":common"))
// adventure
implementation("net.kyori:adventure-api:4.15.0")
@@ -55,7 +56,7 @@ dependencies {
tasks {
shadowJar {
-// relocate ("net.kyori", "net.momirealms.customnameplates.libraries")
+ relocate ("net.kyori", "net.momirealms.customnameplates.libraries")
relocate ("org.bstats", "net.momirealms.customnameplates.libraries.bstats")
relocate ("net.momirealms.biomeapi", "net.momirealms.customnameplates.libraries.biomeapi")
}
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/CustomNameplatesPluginImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/CustomNameplatesPluginImpl.java
index 6e7e50b..0b1bc53 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/CustomNameplatesPluginImpl.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/CustomNameplatesPluginImpl.java
@@ -70,7 +70,7 @@ public class CustomNameplatesPluginImpl extends CustomNameplatesPlugin {
public void onDisable() {
((SchedulerImpl) this.scheduler).shutdown();
((ActionBarManagerImpl) actionBarManager).unload();
- ((NameplateManagerImpl) this.nameplateManager).unload();
+ ((NameplateManagerImpl) this.nameplateManager).disable();
((TeamManagerImpl) this.teamManager).unload();
((BossBarManagerImpl) this.bossBarManager).unload();
((ImageManagerImpl) this.imageManager).unload();
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/adventure/AdventureManagerImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/adventure/AdventureManagerImpl.java
index f576fc0..f483b6c 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/adventure/AdventureManagerImpl.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/adventure/AdventureManagerImpl.java
@@ -75,12 +75,12 @@ public class AdventureManagerImpl implements AdventureManager {
}
@Override
- public net.momirealms.customnameplates.api.common.Key keyToKey(Key key) {
- return net.momirealms.customnameplates.api.common.Key.of(key.namespace(), key.value());
+ public net.momirealms.customnameplates.common.Key keyToKey(Key key) {
+ return net.momirealms.customnameplates.common.Key.of(key.namespace(), key.value());
}
@Override
- public Key keyToKey(net.momirealms.customnameplates.api.common.Key key) {
+ public Key keyToKey(net.momirealms.customnameplates.common.Key key) {
return Key.key(key.namespace(), key.value());
}
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/bossbar/BossBarManagerImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/bossbar/BossBarManagerImpl.java
index 30c2fb9..b049b2d 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/bossbar/BossBarManagerImpl.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/bossbar/BossBarManagerImpl.java
@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.paper.mechanic.bossbar;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
-import net.momirealms.customnameplates.api.common.Pair;
+import net.momirealms.customnameplates.common.Pair;
import net.momirealms.customnameplates.api.manager.BossBarManager;
import net.momirealms.customnameplates.api.util.LogUtils;
import net.momirealms.customnameplates.paper.mechanic.misc.DisplayController;
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/bossbar/BossBarReceiver.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/bossbar/BossBarReceiver.java
index 24fd79b..110512c 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/bossbar/BossBarReceiver.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/bossbar/BossBarReceiver.java
@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.paper.mechanic.bossbar;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
-import net.momirealms.customnameplates.api.common.Pair;
+import net.momirealms.customnameplates.common.Pair;
import net.momirealms.customnameplates.api.requirement.Condition;
import net.momirealms.customnameplates.api.scheduler.CancellableTask;
import net.momirealms.customnameplates.api.util.LogUtils;
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/font/WidthManagerImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/font/WidthManagerImpl.java
index b8cd996..7e4c448 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/font/WidthManagerImpl.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/font/WidthManagerImpl.java
@@ -13,15 +13,14 @@ import net.kyori.adventure.text.minimessage.internal.parser.node.TagNode;
import net.kyori.adventure.text.minimessage.internal.parser.node.ValueNode;
import net.kyori.adventure.text.minimessage.tag.Inserting;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
-import net.momirealms.customnameplates.api.common.Key;
-import net.momirealms.customnameplates.api.common.Tuple;
+import net.momirealms.customnameplates.common.Key;
+import net.momirealms.customnameplates.common.Tuple;
import net.momirealms.customnameplates.api.manager.WidthManager;
import net.momirealms.customnameplates.api.mechanic.background.BackGround;
import net.momirealms.customnameplates.api.mechanic.character.ConfiguredChar;
import net.momirealms.customnameplates.api.mechanic.font.FontData;
import net.momirealms.customnameplates.api.mechanic.font.OffsetFont;
import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate;
-import net.momirealms.customnameplates.api.util.FontUtils;
import net.momirealms.customnameplates.api.util.LogUtils;
import net.momirealms.customnameplates.paper.adventure.AdventureManagerImpl;
import net.momirealms.customnameplates.paper.setting.CNConfig;
@@ -80,8 +79,7 @@ public class WidthManagerImpl implements WidthManager {
private void loadInternalConfigs() {
FontData fontData = new FontData(8);
- ArrayList chars = new ArrayList<>();
- chars.addAll(plugin.getImageManager().getImages());
+ ArrayList chars = new ArrayList<>(plugin.getImageManager().getImages());
for (Nameplate nameplate : plugin.getNameplateManager().getNameplates()) {
chars.add(nameplate.getLeft());
chars.add(nameplate.getMiddle());
@@ -241,7 +239,6 @@ public class WidthManagerImpl implements WidthManager {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(entry)))) {
YamlConfiguration yml = new YamlConfiguration();
String line;
- loop:
while ((line = reader.readLine()) != null) {
String[] parts = line.split(":");
if (parts.length > 1) {
@@ -263,7 +260,8 @@ public class WidthManagerImpl implements WidthManager {
int x;
int n;
- outer: {
+ outer:
+ {
for (x = 0; x < splitInterval; x++) {
inner:
for (int y = 0; y < 16; y++) {
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/nameplate/NameplateManagerImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/nameplate/NameplateManagerImpl.java
index 1f624c3..c4e32b9 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/nameplate/NameplateManagerImpl.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/nameplate/NameplateManagerImpl.java
@@ -15,7 +15,7 @@ import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate;
import net.momirealms.customnameplates.api.mechanic.nameplate.TagMode;
import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer;
import net.momirealms.customnameplates.api.mechanic.tag.unlimited.UnlimitedTagSetting;
-import net.momirealms.customnameplates.api.mechanic.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamColor;
import net.momirealms.customnameplates.api.scheduler.CancellableTask;
import net.momirealms.customnameplates.api.util.FontUtils;
import net.momirealms.customnameplates.api.util.LogUtils;
@@ -120,6 +120,11 @@ public class NameplateManagerImpl implements NameplateManager, Listener {
ProtocolLibrary.getProtocolManager().removePacketListener(entityTeleportListener);
}
+ public void disable() {
+ this.proxyMode = false;
+ unload();
+ }
+
public void load() {
if (!CNConfig.nameplateModule) return;
this.loadConfig();
@@ -411,7 +416,7 @@ public class NameplateManagerImpl implements NameplateManager, Listener {
public String getNameplatePrefix(Player player) {
CachedNameplate cachedNameplate = cachedNameplateMap.get(player.getUniqueId());
if (cachedNameplate == null) return "";
- return "<#FEFEFE>" + cachedNameplate.getTagPrefix() + "#FEFEFE>";
+ return cachedNameplate.getTagPrefix();
}
@Override
@@ -428,7 +433,7 @@ public class NameplateManagerImpl implements NameplateManager, Listener {
return player.getName();
}
- return "<#FEFEFE>" + cachedNameplate.getTagPrefix() + "#FEFEFE>"
+ return cachedNameplate.getTagPrefix()
+ cachedNameplate.getNamePrefix()
+ cachedNameplate.getPlayerName()
+ cachedNameplate.getNameSuffix()
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/pack/ResourcePackManagerImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/pack/ResourcePackManagerImpl.java
index d89e64a..5ca1ffa 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/pack/ResourcePackManagerImpl.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/pack/ResourcePackManagerImpl.java
@@ -184,7 +184,6 @@ public class ResourcePackManagerImpl implements ResourcePackManager {
image.setRGB(i, j, 0);
}
}
-
ImageIO.write(image, "png", inputFile);
} catch (IOException e) {
e.printStackTrace();
@@ -389,12 +388,16 @@ public class ResourcePackManagerImpl implements ResourcePackManager {
public static final String Nameplates_Shader =
"if (Color.xyz == vec3(255., 254., 253.) / 255.) {\n" +
" vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" +
- " vertex.y+= 1;\n" +
- " vertex.x+= 1;\n" +
+ " vertex.y += 1;\n" +
+ " vertex.x += 1;\n" +
" gl_Position = ProjMat * ModelViewMat * vertex;\n" +
" } else if (Color.xyz == vec3(254., 254., 254.) / 255.) {\n" +
" vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" +
- " vertex.z-= 0.01;\n" +
+ " vertex.z -= 0.001;\n" +
+ " gl_Position = ProjMat * ModelViewMat * vertex;\n" +
+ " } else if (Color.xyz == vec3(253., 254., 254.) / 255.) {\n" +
+ " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" +
+ " vertex.z -= 0.0011;\n" +
" gl_Position = ProjMat * ModelViewMat * vertex;\n" +
" } else {\n" +
" vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" +
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/placeholder/PlaceholderManagerImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/placeholder/PlaceholderManagerImpl.java
index deb25d4..0524f62 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/placeholder/PlaceholderManagerImpl.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/placeholder/PlaceholderManagerImpl.java
@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.paper.mechanic.placeholder;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
-import net.momirealms.customnameplates.api.common.Pair;
+import net.momirealms.customnameplates.common.Pair;
import net.momirealms.customnameplates.api.manager.PlaceholderManager;
import net.momirealms.customnameplates.api.mechanic.placeholder.*;
import net.momirealms.customnameplates.api.requirement.Requirement;
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/requirement/RequirementManagerImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/requirement/RequirementManagerImpl.java
index fd62c6c..dd9bb85 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/requirement/RequirementManagerImpl.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/requirement/RequirementManagerImpl.java
@@ -19,7 +19,7 @@ package net.momirealms.customnameplates.paper.mechanic.requirement;
import me.clip.placeholderapi.PlaceholderAPI;
import net.momirealms.biomeapi.BiomeAPI;
-import net.momirealms.customnameplates.api.common.Pair;
+import net.momirealms.customnameplates.common.Pair;
import net.momirealms.customnameplates.api.manager.RequirementManager;
import net.momirealms.customnameplates.api.requirement.Requirement;
import net.momirealms.customnameplates.api.requirement.RequirementExpansion;
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/team/TeamManagerImpl.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/team/TeamManagerImpl.java
index 05f27cd..e928b2c 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/team/TeamManagerImpl.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/team/TeamManagerImpl.java
@@ -5,9 +5,13 @@ import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams;
import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
import net.momirealms.customnameplates.api.manager.TeamManager;
import net.momirealms.customnameplates.api.mechanic.team.*;
+import net.momirealms.customnameplates.common.message.MessageType;
+import net.momirealms.customnameplates.common.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamTagVisibility;
import net.momirealms.customnameplates.paper.mechanic.misc.PacketManager;
import net.momirealms.customnameplates.paper.mechanic.team.packet.TeamPacketAdaptor;
import net.momirealms.customnameplates.paper.mechanic.team.packet.TeamPacket_1_17;
@@ -75,7 +79,10 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
@Override
public void createProxyTeam(Player player) {
-
+ sendPluginMessage(
+ MessageType.CREATE,
+ player.getUniqueId().toString()
+ );
}
@Override
@@ -94,7 +101,8 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
@Override
public void removeProxyTeam(Player player) {
- this.sendPluginMessage(MessageType.REMOVE,
+ this.sendPluginMessage(
+ MessageType.REMOVE,
player.getName()
);
}
@@ -103,16 +111,28 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
public void updateTeam(Player owner, Player viewer, Component prefix, Component suffix, TeamColor color, TeamTagVisibility visibility) {
if (color == TeamColor.NONE || color == TeamColor.CUSTOM)
color = TeamColor.WHITE;
- PacketContainer packet = teamPacketAdaptor.getTeamUpdatePacket(
- TeamUpdatePacket.builder()
- .teamName(teamProvider.getTeam(owner))
- .color(color)
- .prefix(prefix)
- .suffix(suffix)
- .tagVisibility(visibility)
- .build()
- );
- PacketManager.getInstance().send(viewer, packet);
+ if (plugin.getNameplateManager().isProxyMode()) {
+ this.sendPluginMessage(
+ MessageType.UPDATE,
+ owner.getName(),
+ viewer.getName(),
+ GsonComponentSerializer.gson().serialize(prefix),
+ GsonComponentSerializer.gson().serialize(suffix),
+ color.name(),
+ visibility.name()
+ );
+ } else {
+ PacketContainer packet = teamPacketAdaptor.getTeamUpdatePacket(
+ TeamUpdatePacket.builder()
+ .teamName(teamProvider.getTeam(owner))
+ .color(color)
+ .prefix(prefix)
+ .suffix(suffix)
+ .tagVisibility(visibility)
+ .build()
+ );
+ PacketManager.getInstance().send(viewer, packet);
+ }
}
public void reload() {
@@ -159,16 +179,11 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput();
dataOutput.writeByte(messages.length);
for (String message : messages) {
+ plugin.debug(message);
dataOutput.writeUTF(message);
}
Bukkit.getOnlinePlayers().stream().findAny().ifPresent(player -> {
player.sendPluginMessage(plugin, CHANNEL, dataOutput.toByteArray());
});
}
-
- public static class MessageType {
-
- public static final String CREATE = "create";
- public static final String REMOVE = "remove";
- }
}
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/team/packet/TeamPacket_1_17.java b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/team/packet/TeamPacket_1_17.java
index 6ea3e38..9411aff 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/team/packet/TeamPacket_1_17.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/mechanic/team/packet/TeamPacket_1_17.java
@@ -6,7 +6,7 @@ import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.wrappers.WrappedChatComponent;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
-import net.momirealms.customnameplates.api.mechanic.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamColor;
import net.momirealms.customnameplates.api.mechanic.team.TeamCreatePacket;
import net.momirealms.customnameplates.api.mechanic.team.TeamRemovePacket;
import net.momirealms.customnameplates.api.mechanic.team.TeamUpdatePacket;
diff --git a/paper/src/main/java/net/momirealms/customnameplates/paper/util/ConfigUtils.java b/paper/src/main/java/net/momirealms/customnameplates/paper/util/ConfigUtils.java
index f0fe6b0..7517055 100644
--- a/paper/src/main/java/net/momirealms/customnameplates/paper/util/ConfigUtils.java
+++ b/paper/src/main/java/net/momirealms/customnameplates/paper/util/ConfigUtils.java
@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.paper.util;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
-import net.momirealms.customnameplates.api.common.Pair;
+import net.momirealms.customnameplates.common.Pair;
import net.momirealms.customnameplates.api.requirement.Requirement;
import net.momirealms.customnameplates.api.util.LogUtils;
import net.momirealms.customnameplates.paper.mechanic.misc.TimeLimitText;
diff --git a/paper/src/main/resources/configs/nameplate.yml b/paper/src/main/resources/configs/nameplate.yml
index ff9f083..101d51c 100644
--- a/paper/src/main/resources/configs/nameplate.yml
+++ b/paper/src/main/resources/configs/nameplate.yml
@@ -1,7 +1,9 @@
# Team / Unlimited / Disable
mode: TEAM
-# If you are using BungeeCord/Velocity, it's advised to install CustomNameplates on proxy too and enable this option.
+# You should enable this when you are
+# ① using Velocitab by William278 on Velocity
+# ② using TAB by NEZNAMY on BungeeCord
proxy: false
# The duration (in seconds) that the nameplate preview will last for.
diff --git a/paper/src/main/resources/plugin.yml b/paper/src/main/resources/plugin.yml
index f740ea6..689151f 100644
--- a/paper/src/main/resources/plugin.yml
+++ b/paper/src/main/resources/plugin.yml
@@ -4,4 +4,5 @@ main: net.momirealms.customnameplates.paper.CustomNameplatesPluginImpl
api-version: 1.17
authors: [ XiaoMoMi ]
folia-supported: true
-depend: [ ProtocolLib ,PlaceholderAPI ]
\ No newline at end of file
+depend: [ ProtocolLib ,PlaceholderAPI ]
+softdepend: [ MagicCosmetics, TAB, CMI, TrChat, ItemsAdder, Oraxen ]
\ No newline at end of file
diff --git a/settings.gradle.kts b/settings.gradle.kts
index 1c3a374..caada4c 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -3,3 +3,4 @@ include("api")
include("bungeecord")
include("velocity")
include("paper")
+include("common")
diff --git a/velocity/build.gradle.kts b/velocity/build.gradle.kts
index 571b417..bdbae33 100644
--- a/velocity/build.gradle.kts
+++ b/velocity/build.gradle.kts
@@ -1,2 +1,10 @@
dependencies {
+ implementation(project(":common"))
+ compileOnly("io.netty:netty-codec-http:4.1.105.Final")
+ // velocity
+ compileOnly("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT")
+ compileOnly("com.velocitypowered:velocity-proxy:3.3.0-SNAPSHOT")
+ annotationProcessor("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT")
+ // velocitab
+ compileOnly("net.william278:velocitab:1.6.1")
}
\ No newline at end of file
diff --git a/velocity/src/main/java/net/momirealms/customnameplates/velocity/CustomNameplatesVelocity.java b/velocity/src/main/java/net/momirealms/customnameplates/velocity/CustomNameplatesVelocity.java
new file mode 100644
index 0000000..aa723c9
--- /dev/null
+++ b/velocity/src/main/java/net/momirealms/customnameplates/velocity/CustomNameplatesVelocity.java
@@ -0,0 +1,121 @@
+package net.momirealms.customnameplates.velocity;
+
+import com.google.common.io.ByteArrayDataInput;
+import com.google.common.io.ByteStreams;
+import com.google.inject.Inject;
+import com.velocitypowered.api.event.Subscribe;
+import com.velocitypowered.api.event.connection.PluginMessageEvent;
+import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
+import com.velocitypowered.api.event.proxy.ProxyShutdownEvent;
+import com.velocitypowered.api.plugin.Dependency;
+import com.velocitypowered.api.plugin.Plugin;
+import com.velocitypowered.api.plugin.PluginContainer;
+import com.velocitypowered.api.proxy.Player;
+import com.velocitypowered.api.proxy.ProxyServer;
+import com.velocitypowered.api.proxy.messages.MinecraftChannelIdentifier;
+import net.momirealms.customnameplates.common.message.MessageType;
+import net.momirealms.customnameplates.common.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamTagVisibility;
+import org.slf4j.Logger;
+
+import java.time.Duration;
+import java.util.Optional;
+
+@Plugin(
+ id = "customnameplates",
+ name = "CustomNameplates",
+ version = "2.3",
+ authors = {"XiaoMoMi"},
+ dependencies = {@Dependency(id = "velocitab", optional = true)}
+)
+public class CustomNameplatesVelocity {
+
+ private static final String CHANNEL = "customnameplates:cnp";
+ private static CustomNameplatesVelocity instance;
+ private final ProxyServer server;
+ private final Logger logger;
+ private VelocityTeamManager teamManager;
+
+ @Inject
+ public CustomNameplatesVelocity(ProxyServer server, Logger logger) {
+ this.server = server;
+ this.logger = logger;
+ }
+
+ @Subscribe
+ public void onInit(ProxyInitializeEvent event) {
+ instance = this;
+ server.getChannelRegistrar().register(MinecraftChannelIdentifier.from(CHANNEL));
+ Optional optContainer = server.getPluginManager().getPlugin("velocitab");
+ if (optContainer.isEmpty()) {
+ logger.warn("You don't have to install CustomNameplates on Velocity if you don't use Velocitab");
+ server.shutdown();
+ } else {
+ teamManager = new VelocitabManager(optContainer.get());
+ }
+ }
+
+ @Subscribe
+ public void onShutdown(ProxyShutdownEvent event) {
+ server.getChannelRegistrar().unregister(MinecraftChannelIdentifier.from(CHANNEL));
+ }
+
+ @Subscribe
+ @SuppressWarnings("UnstableApiUsage")
+ public void onPluginMessage(PluginMessageEvent event) {
+ if (!event.getIdentifier().getId().equals(CHANNEL)) {
+ return;
+ }
+ if (teamManager == null) {
+ this.logger.warn("No team manager available");
+ return;
+ }
+ ByteArrayDataInput dataInput = ByteStreams.newDataInput(event.getData());
+ byte length = dataInput.readByte();
+ if (length != 7) {
+ return;
+ }
+ String type = dataInput.readUTF();
+ if (!type.equals(MessageType.UPDATE)) {
+ return;
+ }
+ Optional optionalOwner = server.getPlayer(dataInput.readUTF());
+ if (optionalOwner.isEmpty()) return;
+ Player owner = optionalOwner.get();
+
+ String team = teamManager.getTeamName(owner);
+
+ Optional optionalViewer = server.getPlayer(dataInput.readUTF());
+ if (optionalViewer.isEmpty()) return;
+ Player viewer = optionalViewer.get();
+
+ String prefixJson = dataInput.readUTF();
+ String suffixJson = dataInput.readUTF();
+
+ TeamColor teamColor = TeamColor.valueOf(dataInput.readUTF());
+ TeamTagVisibility visibility = TeamTagVisibility.valueOf(dataInput.readUTF());
+
+ if (teamManager instanceof VelocitabManager) {
+ server.getScheduler().buildTask(this, () -> {
+ if (!owner.isActive() || !viewer.isActive()) {
+ return;
+ }
+ String teamNameRetry = teamManager.getTeamName(owner);
+ if (teamNameRetry != null)
+ teamManager.sendTeamUpdatePacket(viewer, teamNameRetry, teamColor, visibility, prefixJson, suffixJson);
+ else
+ logger.warn("Failed to get player " + owner.getUsername() + "'s team name.");
+ }).delay(Duration.ofMillis(500)).schedule();
+ } else {
+ teamManager.sendTeamUpdatePacket(viewer, team, teamColor, visibility, prefixJson, suffixJson);
+ }
+ }
+
+ public static CustomNameplatesVelocity get() {
+ return instance;
+ }
+
+ public static CustomNameplatesVelocity getPlugin() {
+ return instance;
+ }
+}
diff --git a/velocity/src/main/java/net/momirealms/customnameplates/velocity/VelocitabManager.java b/velocity/src/main/java/net/momirealms/customnameplates/velocity/VelocitabManager.java
new file mode 100644
index 0000000..aa2f703
--- /dev/null
+++ b/velocity/src/main/java/net/momirealms/customnameplates/velocity/VelocitabManager.java
@@ -0,0 +1,52 @@
+package net.momirealms.customnameplates.velocity;
+
+import com.velocitypowered.api.plugin.PluginContainer;
+import com.velocitypowered.api.proxy.Player;
+import com.velocitypowered.proxy.connection.client.ConnectedPlayer;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
+import net.momirealms.customnameplates.common.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamTagVisibility;
+import net.william278.velocitab.Velocitab;
+import net.william278.velocitab.api.VelocitabAPI;
+import net.william278.velocitab.packet.UpdateTeamsPacket;
+import net.william278.velocitab.player.TabPlayer;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+import java.util.Optional;
+
+public class VelocitabManager implements VelocityTeamManager {
+
+ private final Velocitab velocitab;
+ private final VelocitabAPI velocitabAPI;
+
+ public VelocitabManager(PluginContainer pluginContainer) {
+ velocitab = (Velocitab) pluginContainer.getInstance().get();
+ velocitabAPI = VelocitabAPI.getInstance();
+ }
+
+ @Override
+ @Nullable
+ public String getTeamName(Player player) {
+ Optional playerOptional = velocitabAPI.getUser(player);
+ return playerOptional.map(TabPlayer::getTeamName).orElse(null);
+ }
+
+ @Override
+ public void sendTeamUpdatePacket(Player receiver, String team, TeamColor color, TeamTagVisibility visibility, String prefix, String suffix) {
+ UpdateTeamsPacket packet = new UpdateTeamsPacket(velocitab)
+ .teamName(team.length() > 16 ? team.substring(0, 16) : team)
+ .mode(UpdateTeamsPacket.UpdateMode.UPDATE_INFO)
+ .displayName(Component.empty())
+ .friendlyFlags(List.of(UpdateTeamsPacket.FriendlyFlag.CAN_HURT_FRIENDLY))
+ .nametagVisibility(UpdateTeamsPacket.NametagVisibility.valueOf(visibility.name()))
+ .collisionRule(UpdateTeamsPacket.CollisionRule.ALWAYS)
+ .color(UpdateTeamsPacket.TeamColor.valueOf(color.name()).ordinal())
+ .prefix(GsonComponentSerializer.gson().deserialize(prefix))
+ .suffix(GsonComponentSerializer.gson().deserialize(suffix));
+
+ ConnectedPlayer connectedPlayer = (ConnectedPlayer) receiver;
+ connectedPlayer.getConnection().write(packet);
+ }
+}
diff --git a/velocity/src/main/java/net/momirealms/customnameplates/velocity/VelocityTeamManager.java b/velocity/src/main/java/net/momirealms/customnameplates/velocity/VelocityTeamManager.java
new file mode 100644
index 0000000..d084811
--- /dev/null
+++ b/velocity/src/main/java/net/momirealms/customnameplates/velocity/VelocityTeamManager.java
@@ -0,0 +1,14 @@
+package net.momirealms.customnameplates.velocity;
+
+import com.velocitypowered.api.proxy.Player;
+import net.momirealms.customnameplates.common.team.TeamColor;
+import net.momirealms.customnameplates.common.team.TeamTagVisibility;
+import org.jetbrains.annotations.Nullable;
+
+public interface VelocityTeamManager {
+
+ @Nullable
+ String getTeamName(Player player);
+
+ void sendTeamUpdatePacket(Player receiver, String team, TeamColor color, TeamTagVisibility visibility, String prefix, String suffix);
+}
diff --git a/velocity/src/main/resources/plugin.yml b/velocity/src/main/resources/plugin.yml
deleted file mode 100644
index 5bf5d9b..0000000
--- a/velocity/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: CustomNameplates
-version: '${version}'
-main: net.momirealms.customnameplates.paper.Main
-api-version: 1.17
-authors: [ XiaoMoMi ]
-folia-supported: true
-depend:
- - ProtocolLib
- - PlaceholderAPI
\ No newline at end of file