9
0
mirror of https://github.com/Xiao-MoMi/Custom-Nameplates.git synced 2025-12-19 15:09:23 +00:00

velocity module

This commit is contained in:
XiaoMoMi
2024-01-21 18:03:00 +08:00
parent d6ac11e8b3
commit b2f329332d
44 changed files with 352 additions and 81 deletions

View File

@@ -1,4 +1,5 @@
dependencies { dependencies {
implementation(project(":common"))
compileOnly("dev.folia:folia-api:1.20.1-R0.1-SNAPSHOT") compileOnly("dev.folia:folia-api:1.20.1-R0.1-SNAPSHOT")
compileOnly("me.clip:placeholderapi:2.11.5") compileOnly("me.clip:placeholderapi:2.11.5")
} }

View File

@@ -25,9 +25,9 @@ import org.bukkit.entity.Player;
public interface AdventureManager { 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); Object getIChatComponentFromMiniMessage(String text);

View File

@@ -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.Nameplate;
import net.momirealms.customnameplates.api.mechanic.nameplate.TagMode; import net.momirealms.customnameplates.api.mechanic.nameplate.TagMode;
import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer; 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.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@@ -1,8 +1,8 @@
package net.momirealms.customnameplates.api.manager; package net.momirealms.customnameplates.api.manager;
import net.kyori.adventure.text.Component; import net.kyori.adventure.text.Component;
import net.momirealms.customnameplates.api.mechanic.team.TeamColor; import net.momirealms.customnameplates.common.team.TeamColor;
import net.momirealms.customnameplates.api.mechanic.team.TeamTagVisibility; import net.momirealms.customnameplates.common.team.TeamTagVisibility;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
public interface TeamManager { public interface TeamManager {

View File

@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.api.manager; 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.api.mechanic.font.FontData;
import net.momirealms.customnameplates.common.Key;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public interface WidthManager { public interface WidthManager {

View File

@@ -1,6 +1,6 @@
package net.momirealms.customnameplates.api.mechanic.nameplate; 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 { public class CachedNameplate {

View File

@@ -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.character.ConfiguredChar;
import net.momirealms.customnameplates.api.mechanic.font.OffsetFont; 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; import net.momirealms.customnameplates.api.util.FontUtils;
public class Nameplate { public class Nameplate {
@@ -86,6 +86,7 @@ public class Nameplate {
public String getPrefix(int textWidth) { public String getPrefix(int textWidth) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<#FEFEFE>");
stringBuilder.append(OffsetFont.getShortestNegChars(textWidth + left.getWidth() + 1)); stringBuilder.append(OffsetFont.getShortestNegChars(textWidth + left.getWidth() + 1));
stringBuilder.append(left.getCharacter()); stringBuilder.append(left.getCharacter());
stringBuilder.append(OffsetFont.NEG_1.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(OffsetFont.getShortestNegChars(middle.getWidth() - (textWidth+2) % middle.getWidth() + 1)); // +1
} }
stringBuilder.append("<#FDFEFE>");
stringBuilder.append(middle.getCharacter()); stringBuilder.append(middle.getCharacter());
stringBuilder.append("</#FDFEFE>");
stringBuilder.append(OffsetFont.NEG_1.getCharacter()); stringBuilder.append(OffsetFont.NEG_1.getCharacter());
stringBuilder.append(right.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(); return stringBuilder.toString();
} }

View File

@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.api.mechanic.placeholder; package net.momirealms.customnameplates.api.mechanic.placeholder;
import me.clip.placeholderapi.PlaceholderAPI; 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.manager.RequirementManager;
import net.momirealms.customnameplates.api.requirement.Condition; import net.momirealms.customnameplates.api.requirement.Condition;
import net.momirealms.customnameplates.api.requirement.Requirement; import net.momirealms.customnameplates.api.requirement.Requirement;

View File

@@ -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.misc.ViewerText;
import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate; import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate;
import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer; import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer;
import net.momirealms.customnameplates.api.mechanic.team.TeamColor; import net.momirealms.customnameplates.common.team.TeamColor;
import net.momirealms.customnameplates.api.mechanic.team.TeamTagVisibility; import net.momirealms.customnameplates.common.team.TeamTagVisibility;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.util.Vector; import java.util.Vector;

View File

@@ -5,8 +5,8 @@ import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
import net.momirealms.customnameplates.api.manager.UnlimitedTagManager; import net.momirealms.customnameplates.api.manager.UnlimitedTagManager;
import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate; import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate;
import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer; import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer;
import net.momirealms.customnameplates.api.mechanic.team.TeamColor; import net.momirealms.customnameplates.common.team.TeamColor;
import net.momirealms.customnameplates.api.mechanic.team.TeamTagVisibility; import net.momirealms.customnameplates.common.team.TeamTagVisibility;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.entity.Pose; import org.bukkit.entity.Pose;

View File

@@ -1,6 +1,9 @@
package net.momirealms.customnameplates.api.mechanic.team; package net.momirealms.customnameplates.api.mechanic.team;
import net.kyori.adventure.text.Component; 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.Collection;
import java.util.Collections; import java.util.Collections;

View File

@@ -1,6 +1,9 @@
package net.momirealms.customnameplates.api.mechanic.team; package net.momirealms.customnameplates.api.mechanic.team;
import net.kyori.adventure.text.Component; 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 { public class TeamUpdatePacket {

View File

@@ -36,6 +36,7 @@ allprojects {
maven("https://repo.auxilor.io/repository/maven-public/") maven("https://repo.auxilor.io/repository/maven-public/")
maven("https://betonquest.org/nexus/repository/betonquest/") maven("https://betonquest.org/nexus/repository/betonquest/")
maven("https://repo.william278.net/releases/") maven("https://repo.william278.net/releases/")
maven("https://repo.william278.net/velocity/")
maven("https://s01.oss.sonatype.org/content/repositories/snapshots/") maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
maven("https://repo.minebench.de/") maven("https://repo.minebench.de/")
maven("https://repo.xenondevs.xyz/releases/") maven("https://repo.xenondevs.xyz/releases/")

42
common/.gitignore vendored Normal file
View File

@@ -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

3
common/build.gradle.kts Normal file
View File

@@ -0,0 +1,3 @@
dependencies {
compileOnly("org.jetbrains:annotations:24.1.0")
}

View File

@@ -15,7 +15,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.momirealms.customnameplates.api.common; package net.momirealms.customnameplates.common;
public record Key(String namespace, String value) { public record Key(String namespace, String value) {

View File

@@ -15,7 +15,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.momirealms.customnameplates.api.common; package net.momirealms.customnameplates.common;
public record Pair<L, R>(L left, R right) { public record Pair<L, R>(L left, R right) {

View File

@@ -15,9 +15,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.momirealms.customnameplates.api.common; package net.momirealms.customnameplates.common;
import org.bukkit.Location;
import java.util.Objects; 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)); hash = 19 * hash + (int) (Double.doubleToLongBits(this.z) ^ (Double.doubleToLongBits(this.z) >>> 32));
return hash; return hash;
} }
public static SimpleLocation getByBukkitLocation(Location location) {
return new SimpleLocation(location.getWorld().getName(), location.getBlockX(), location.getBlockY(), location.getBlockZ());
}
} }

View File

@@ -15,7 +15,7 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
package net.momirealms.customnameplates.api.common; package net.momirealms.customnameplates.common;
public class Tuple<L, M, R> { public class Tuple<L, M, R> {

View File

@@ -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";
}

View File

@@ -1,4 +1,4 @@
package net.momirealms.customnameplates.api.mechanic.team; package net.momirealms.customnameplates.common.team;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@@ -1,4 +1,4 @@
package net.momirealms.customnameplates.api.mechanic.team; package net.momirealms.customnameplates.common.team;
import java.util.Locale; import java.util.Locale;

View File

@@ -1,4 +1,4 @@
package net.momirealms.customnameplates.api.mechanic.team; package net.momirealms.customnameplates.common.team;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View File

@@ -39,6 +39,7 @@ dependencies {
// api module // api module
implementation(project(":api")) implementation(project(":api"))
implementation(project(":common"))
// adventure // adventure
implementation("net.kyori:adventure-api:4.15.0") implementation("net.kyori:adventure-api:4.15.0")
@@ -55,7 +56,7 @@ dependencies {
tasks { tasks {
shadowJar { shadowJar {
// relocate ("net.kyori", "net.momirealms.customnameplates.libraries") relocate ("net.kyori", "net.momirealms.customnameplates.libraries")
relocate ("org.bstats", "net.momirealms.customnameplates.libraries.bstats") relocate ("org.bstats", "net.momirealms.customnameplates.libraries.bstats")
relocate ("net.momirealms.biomeapi", "net.momirealms.customnameplates.libraries.biomeapi") relocate ("net.momirealms.biomeapi", "net.momirealms.customnameplates.libraries.biomeapi")
} }

View File

@@ -70,7 +70,7 @@ public class CustomNameplatesPluginImpl extends CustomNameplatesPlugin {
public void onDisable() { public void onDisable() {
((SchedulerImpl) this.scheduler).shutdown(); ((SchedulerImpl) this.scheduler).shutdown();
((ActionBarManagerImpl) actionBarManager).unload(); ((ActionBarManagerImpl) actionBarManager).unload();
((NameplateManagerImpl) this.nameplateManager).unload(); ((NameplateManagerImpl) this.nameplateManager).disable();
((TeamManagerImpl) this.teamManager).unload(); ((TeamManagerImpl) this.teamManager).unload();
((BossBarManagerImpl) this.bossBarManager).unload(); ((BossBarManagerImpl) this.bossBarManager).unload();
((ImageManagerImpl) this.imageManager).unload(); ((ImageManagerImpl) this.imageManager).unload();

View File

@@ -75,12 +75,12 @@ public class AdventureManagerImpl implements AdventureManager {
} }
@Override @Override
public net.momirealms.customnameplates.api.common.Key keyToKey(Key key) { public net.momirealms.customnameplates.common.Key keyToKey(Key key) {
return net.momirealms.customnameplates.api.common.Key.of(key.namespace(), key.value()); return net.momirealms.customnameplates.common.Key.of(key.namespace(), key.value());
} }
@Override @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()); return Key.key(key.namespace(), key.value());
} }

View File

@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.paper.mechanic.bossbar; package net.momirealms.customnameplates.paper.mechanic.bossbar;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin; 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.manager.BossBarManager;
import net.momirealms.customnameplates.api.util.LogUtils; import net.momirealms.customnameplates.api.util.LogUtils;
import net.momirealms.customnameplates.paper.mechanic.misc.DisplayController; import net.momirealms.customnameplates.paper.mechanic.misc.DisplayController;

View File

@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.paper.mechanic.bossbar; package net.momirealms.customnameplates.paper.mechanic.bossbar;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin; 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.requirement.Condition;
import net.momirealms.customnameplates.api.scheduler.CancellableTask; import net.momirealms.customnameplates.api.scheduler.CancellableTask;
import net.momirealms.customnameplates.api.util.LogUtils; import net.momirealms.customnameplates.api.util.LogUtils;

View File

@@ -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.internal.parser.node.ValueNode;
import net.kyori.adventure.text.minimessage.tag.Inserting; import net.kyori.adventure.text.minimessage.tag.Inserting;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin; import net.momirealms.customnameplates.api.CustomNameplatesPlugin;
import net.momirealms.customnameplates.api.common.Key; import net.momirealms.customnameplates.common.Key;
import net.momirealms.customnameplates.api.common.Tuple; import net.momirealms.customnameplates.common.Tuple;
import net.momirealms.customnameplates.api.manager.WidthManager; import net.momirealms.customnameplates.api.manager.WidthManager;
import net.momirealms.customnameplates.api.mechanic.background.BackGround; import net.momirealms.customnameplates.api.mechanic.background.BackGround;
import net.momirealms.customnameplates.api.mechanic.character.ConfiguredChar; import net.momirealms.customnameplates.api.mechanic.character.ConfiguredChar;
import net.momirealms.customnameplates.api.mechanic.font.FontData; import net.momirealms.customnameplates.api.mechanic.font.FontData;
import net.momirealms.customnameplates.api.mechanic.font.OffsetFont; import net.momirealms.customnameplates.api.mechanic.font.OffsetFont;
import net.momirealms.customnameplates.api.mechanic.nameplate.Nameplate; 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.api.util.LogUtils;
import net.momirealms.customnameplates.paper.adventure.AdventureManagerImpl; import net.momirealms.customnameplates.paper.adventure.AdventureManagerImpl;
import net.momirealms.customnameplates.paper.setting.CNConfig; import net.momirealms.customnameplates.paper.setting.CNConfig;
@@ -80,8 +79,7 @@ public class WidthManagerImpl implements WidthManager {
private void loadInternalConfigs() { private void loadInternalConfigs() {
FontData fontData = new FontData(8); FontData fontData = new FontData(8);
ArrayList<ConfiguredChar> chars = new ArrayList<>(); ArrayList<ConfiguredChar> chars = new ArrayList<>(plugin.getImageManager().getImages());
chars.addAll(plugin.getImageManager().getImages());
for (Nameplate nameplate : plugin.getNameplateManager().getNameplates()) { for (Nameplate nameplate : plugin.getNameplateManager().getNameplates()) {
chars.add(nameplate.getLeft()); chars.add(nameplate.getLeft());
chars.add(nameplate.getMiddle()); chars.add(nameplate.getMiddle());
@@ -241,7 +239,6 @@ public class WidthManagerImpl implements WidthManager {
try (BufferedReader reader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(entry)))) { try (BufferedReader reader = new BufferedReader(new InputStreamReader(zipFile.getInputStream(entry)))) {
YamlConfiguration yml = new YamlConfiguration(); YamlConfiguration yml = new YamlConfiguration();
String line; String line;
loop:
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
String[] parts = line.split(":"); String[] parts = line.split(":");
if (parts.length > 1) { if (parts.length > 1) {
@@ -263,7 +260,8 @@ public class WidthManagerImpl implements WidthManager {
int x; int x;
int n; int n;
outer: { outer:
{
for (x = 0; x < splitInterval; x++) { for (x = 0; x < splitInterval; x++) {
inner: inner:
for (int y = 0; y < 16; y++) { for (int y = 0; y < 16; y++) {

View File

@@ -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.nameplate.TagMode;
import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer; import net.momirealms.customnameplates.api.mechanic.tag.NameplatePlayer;
import net.momirealms.customnameplates.api.mechanic.tag.unlimited.UnlimitedTagSetting; 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.scheduler.CancellableTask;
import net.momirealms.customnameplates.api.util.FontUtils; import net.momirealms.customnameplates.api.util.FontUtils;
import net.momirealms.customnameplates.api.util.LogUtils; import net.momirealms.customnameplates.api.util.LogUtils;
@@ -120,6 +120,11 @@ public class NameplateManagerImpl implements NameplateManager, Listener {
ProtocolLibrary.getProtocolManager().removePacketListener(entityTeleportListener); ProtocolLibrary.getProtocolManager().removePacketListener(entityTeleportListener);
} }
public void disable() {
this.proxyMode = false;
unload();
}
public void load() { public void load() {
if (!CNConfig.nameplateModule) return; if (!CNConfig.nameplateModule) return;
this.loadConfig(); this.loadConfig();
@@ -411,7 +416,7 @@ public class NameplateManagerImpl implements NameplateManager, Listener {
public String getNameplatePrefix(Player player) { public String getNameplatePrefix(Player player) {
CachedNameplate cachedNameplate = cachedNameplateMap.get(player.getUniqueId()); CachedNameplate cachedNameplate = cachedNameplateMap.get(player.getUniqueId());
if (cachedNameplate == null) return ""; if (cachedNameplate == null) return "";
return "<#FEFEFE>" + cachedNameplate.getTagPrefix() + "</#FEFEFE>"; return cachedNameplate.getTagPrefix();
} }
@Override @Override
@@ -428,7 +433,7 @@ public class NameplateManagerImpl implements NameplateManager, Listener {
return player.getName(); return player.getName();
} }
return "<#FEFEFE>" + cachedNameplate.getTagPrefix() + "</#FEFEFE>" return cachedNameplate.getTagPrefix()
+ cachedNameplate.getNamePrefix() + cachedNameplate.getNamePrefix()
+ cachedNameplate.getPlayerName() + cachedNameplate.getPlayerName()
+ cachedNameplate.getNameSuffix() + cachedNameplate.getNameSuffix()

View File

@@ -184,7 +184,6 @@ public class ResourcePackManagerImpl implements ResourcePackManager {
image.setRGB(i, j, 0); image.setRGB(i, j, 0);
} }
} }
ImageIO.write(image, "png", inputFile); ImageIO.write(image, "png", inputFile);
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
@@ -389,12 +388,16 @@ public class ResourcePackManagerImpl implements ResourcePackManager {
public static final String Nameplates_Shader = public static final String Nameplates_Shader =
"if (Color.xyz == vec3(255., 254., 253.) / 255.) {\n" + "if (Color.xyz == vec3(255., 254., 253.) / 255.) {\n" +
" vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" +
" vertex.y+= 1;\n" + " vertex.y += 1;\n" +
" vertex.x+= 1;\n" + " vertex.x += 1;\n" +
" gl_Position = ProjMat * ModelViewMat * vertex;\n" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" +
" } else if (Color.xyz == vec3(254., 254., 254.) / 255.) {\n" + " } else if (Color.xyz == vec3(254., 254., 254.) / 255.) {\n" +
" vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\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" + " gl_Position = ProjMat * ModelViewMat * vertex;\n" +
" } else {\n" + " } else {\n" +
" vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" + " vertexColor = Color*texelFetch(Sampler2, UV2 / 16, 0);\n" +

View File

@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.paper.mechanic.placeholder; package net.momirealms.customnameplates.paper.mechanic.placeholder;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin; 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.manager.PlaceholderManager;
import net.momirealms.customnameplates.api.mechanic.placeholder.*; import net.momirealms.customnameplates.api.mechanic.placeholder.*;
import net.momirealms.customnameplates.api.requirement.Requirement; import net.momirealms.customnameplates.api.requirement.Requirement;

View File

@@ -19,7 +19,7 @@ package net.momirealms.customnameplates.paper.mechanic.requirement;
import me.clip.placeholderapi.PlaceholderAPI; import me.clip.placeholderapi.PlaceholderAPI;
import net.momirealms.biomeapi.BiomeAPI; 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.manager.RequirementManager;
import net.momirealms.customnameplates.api.requirement.Requirement; import net.momirealms.customnameplates.api.requirement.Requirement;
import net.momirealms.customnameplates.api.requirement.RequirementExpansion; import net.momirealms.customnameplates.api.requirement.RequirementExpansion;

View File

@@ -5,9 +5,13 @@ import com.google.common.io.ByteArrayDataInput;
import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteArrayDataOutput;
import com.google.common.io.ByteStreams; import com.google.common.io.ByteStreams;
import net.kyori.adventure.text.Component; 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.CustomNameplatesPlugin;
import net.momirealms.customnameplates.api.manager.TeamManager; import net.momirealms.customnameplates.api.manager.TeamManager;
import net.momirealms.customnameplates.api.mechanic.team.*; 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.misc.PacketManager;
import net.momirealms.customnameplates.paper.mechanic.team.packet.TeamPacketAdaptor; import net.momirealms.customnameplates.paper.mechanic.team.packet.TeamPacketAdaptor;
import net.momirealms.customnameplates.paper.mechanic.team.packet.TeamPacket_1_17; import net.momirealms.customnameplates.paper.mechanic.team.packet.TeamPacket_1_17;
@@ -75,7 +79,10 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
@Override @Override
public void createProxyTeam(Player player) { public void createProxyTeam(Player player) {
sendPluginMessage(
MessageType.CREATE,
player.getUniqueId().toString()
);
} }
@Override @Override
@@ -94,7 +101,8 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
@Override @Override
public void removeProxyTeam(Player player) { public void removeProxyTeam(Player player) {
this.sendPluginMessage(MessageType.REMOVE, this.sendPluginMessage(
MessageType.REMOVE,
player.getName() 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) { public void updateTeam(Player owner, Player viewer, Component prefix, Component suffix, TeamColor color, TeamTagVisibility visibility) {
if (color == TeamColor.NONE || color == TeamColor.CUSTOM) if (color == TeamColor.NONE || color == TeamColor.CUSTOM)
color = TeamColor.WHITE; color = TeamColor.WHITE;
PacketContainer packet = teamPacketAdaptor.getTeamUpdatePacket( if (plugin.getNameplateManager().isProxyMode()) {
TeamUpdatePacket.builder() this.sendPluginMessage(
.teamName(teamProvider.getTeam(owner)) MessageType.UPDATE,
.color(color) owner.getName(),
.prefix(prefix) viewer.getName(),
.suffix(suffix) GsonComponentSerializer.gson().serialize(prefix),
.tagVisibility(visibility) GsonComponentSerializer.gson().serialize(suffix),
.build() color.name(),
); visibility.name()
PacketManager.getInstance().send(viewer, packet); );
} 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() { public void reload() {
@@ -159,16 +179,11 @@ public class TeamManagerImpl implements TeamManager, PluginMessageListener {
ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput(); ByteArrayDataOutput dataOutput = ByteStreams.newDataOutput();
dataOutput.writeByte(messages.length); dataOutput.writeByte(messages.length);
for (String message : messages) { for (String message : messages) {
plugin.debug(message);
dataOutput.writeUTF(message); dataOutput.writeUTF(message);
} }
Bukkit.getOnlinePlayers().stream().findAny().ifPresent(player -> { Bukkit.getOnlinePlayers().stream().findAny().ifPresent(player -> {
player.sendPluginMessage(plugin, CHANNEL, dataOutput.toByteArray()); player.sendPluginMessage(plugin, CHANNEL, dataOutput.toByteArray());
}); });
} }
public static class MessageType {
public static final String CREATE = "create";
public static final String REMOVE = "remove";
}
} }

View File

@@ -6,7 +6,7 @@ import com.comphenix.protocol.events.PacketContainer;
import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftReflection;
import com.comphenix.protocol.wrappers.WrappedChatComponent; import com.comphenix.protocol.wrappers.WrappedChatComponent;
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; 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.TeamCreatePacket;
import net.momirealms.customnameplates.api.mechanic.team.TeamRemovePacket; import net.momirealms.customnameplates.api.mechanic.team.TeamRemovePacket;
import net.momirealms.customnameplates.api.mechanic.team.TeamUpdatePacket; import net.momirealms.customnameplates.api.mechanic.team.TeamUpdatePacket;

View File

@@ -1,7 +1,7 @@
package net.momirealms.customnameplates.paper.util; package net.momirealms.customnameplates.paper.util;
import net.momirealms.customnameplates.api.CustomNameplatesPlugin; 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.requirement.Requirement;
import net.momirealms.customnameplates.api.util.LogUtils; import net.momirealms.customnameplates.api.util.LogUtils;
import net.momirealms.customnameplates.paper.mechanic.misc.TimeLimitText; import net.momirealms.customnameplates.paper.mechanic.misc.TimeLimitText;

View File

@@ -1,7 +1,9 @@
# Team / Unlimited / Disable # Team / Unlimited / Disable
mode: TEAM 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 proxy: false
# The duration (in seconds) that the nameplate preview will last for. # The duration (in seconds) that the nameplate preview will last for.

View File

@@ -4,4 +4,5 @@ main: net.momirealms.customnameplates.paper.CustomNameplatesPluginImpl
api-version: 1.17 api-version: 1.17
authors: [ XiaoMoMi ] authors: [ XiaoMoMi ]
folia-supported: true folia-supported: true
depend: [ ProtocolLib ,PlaceholderAPI ] depend: [ ProtocolLib ,PlaceholderAPI ]
softdepend: [ MagicCosmetics, TAB, CMI, TrChat, ItemsAdder, Oraxen ]

View File

@@ -3,3 +3,4 @@ include("api")
include("bungeecord") include("bungeecord")
include("velocity") include("velocity")
include("paper") include("paper")
include("common")

View File

@@ -1,2 +1,10 @@
dependencies { 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")
} }

View File

@@ -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<PluginContainer> 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<Player> optionalOwner = server.getPlayer(dataInput.readUTF());
if (optionalOwner.isEmpty()) return;
Player owner = optionalOwner.get();
String team = teamManager.getTeamName(owner);
Optional<Player> 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;
}
}

View File

@@ -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<TabPlayer> 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);
}
}

View File

@@ -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);
}

View File

@@ -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