9
0
mirror of https://github.com/Xiao-MoMi/Custom-Nameplates.git synced 2026-01-03 22:16:44 +00:00

improve spectator mode

This commit is contained in:
XiaoMoMi
2024-10-07 17:23:57 +08:00
parent 5df341b2a1
commit f6de779090
18 changed files with 260 additions and 47 deletions

View File

@@ -103,6 +103,10 @@ public class BubbleTag extends AbstractTag {
return canShow;
}
@Override
public void onOpacityChange(CNPlayer viewer, boolean dark) {
}
@Override
public boolean canShow(CNPlayer viewer) {
if (!viewer.isMet(owner, manager.viewBubbleRequirements())) {

View File

@@ -63,7 +63,7 @@ public class NameTag extends AbstractTag implements RelationalFeature {
owner.position().add(0,(1.8 + (affectedByCrouching() && tracker.isCrouching() && !owner.isFlying() ? -0.3 : 0) + renderer.hatOffset()) * (affectedByScaling() ? tracker.getScale() : 1),0),
0f, 0f, 0d,
0, 0, 0,
component, config.backgroundColor(), config.opacity(), config.hasShadow(), config.isSeeThrough(), config.useDefaultBackgroundColor(),
component, config.backgroundColor(), opacity(), config.hasShadow(), config.isSeeThrough(), config.useDefaultBackgroundColor(),
config.alignment(), config.viewRange(), config.shadowRadius(), config.shadowStrength(),
(affectedByScaling() ? scale(viewer).multiply(tracker.getScale()) : scale(viewer)),
(affectedByScaling() ? translation(viewer).multiply(tracker.getScale()) : translation(viewer)),
@@ -144,7 +144,7 @@ public class NameTag extends AbstractTag implements RelationalFeature {
@Override
public double getTextHeight(CNPlayer viewer) {
String current = currentText.render(viewer);
Tracker tracker = viewer.getTracker(owner);
Tracker tracker = owner.getTracker(viewer);
int lines = CustomNameplates.getInstance().getAdvanceManager().getLines(current, config.lineWidth());
return ((lines * (9+1) + config.translation().y()) * config.scale().y() * (config.affectedByScaling() ? tracker.getScale() : 1)) / 40;
}
@@ -194,7 +194,7 @@ public class NameTag extends AbstractTag implements RelationalFeature {
@Override
public byte opacity() {
return config.opacity();
return owner.isSpectator() || (owner.isCrouching() && affectedByCrouching()) ? 64 : config.opacity();
}
@Override

View File

@@ -71,32 +71,23 @@ public class TagRendererImpl implements TagRenderer {
HashSet<CNPlayer> playersToUpdatePassengers = new HashSet<>();
for (Tag display : tags) {
boolean canShow = display.canShow();
// 能大众显示
if (canShow) {
// 当前大众显示
if (display.isShown()) {
for (CNPlayer nearby : owner.nearbyPlayers()) {
// 如果已经展示了
if (display.isShown(nearby)) {
// 不满足条件就撤掉
if (!display.canShow(nearby)) {
display.hide(nearby);
}
} else {
// 未展示,则检测条件,可以就上
if (display.canShow(nearby)) {
display.show(nearby);
playersToUpdatePassengers.add(nearby);
}
}
}
// 更新一下文字顺序放在后面是为了防止已经被hide的玩家多收一个包
display.tick();
} else {
// 之前隐藏,现在开始大众显示
// 需要重置文字顺序
display.init();
// 更新一下文字顺序
display.tick();
display.show();
for (CNPlayer nearby : owner.nearbyPlayers()) {
@@ -107,8 +98,6 @@ public class TagRendererImpl implements TagRenderer {
}
}
} else {
// 不能展示的情况
// 如果已经展示了,就咔掉所有玩家
if (display.isShown()) {
display.hide();
}
@@ -264,15 +253,15 @@ public class TagRendererImpl implements TagRenderer {
}
public void handleEntityDataChange(CNPlayer another, boolean isCrouching) {
Tracker properties = owner.getTracker(another);
Tracker tracker = owner.getTracker(another);
// should never be null
if (properties == null) return;
properties.setCrouching(isCrouching);
if (tracker == null) return;
tracker.setCrouching(isCrouching);
for (Tag display : this.tags) {
if (display.affectedByCrouching()) {
if (display.isShown()) {
if (display.isShown(another)) {
display.onPlayerCrouching(another, isCrouching);
display.onOpacityChange(another, isCrouching || tracker.isSpectator());
}
}
}
@@ -280,11 +269,10 @@ public class TagRendererImpl implements TagRenderer {
}
public void handleAttributeChange(CNPlayer another, double scale) {
boolean updatePassengers = false;
Tracker properties = owner.getTracker(another);
Tracker tracker = owner.getTracker(another);
// should never be null
if (properties == null) return;
properties.setScale(scale);
if (tracker == null) return;
tracker.setScale(scale);
for (Tag display : this.tags) {
if (display.affectedByScaling()) {
if (display.isShown()) {
@@ -295,4 +283,18 @@ public class TagRendererImpl implements TagRenderer {
}
}
}
public void handleGameModeChange(CNPlayer another, boolean isSpectator) {
Tracker tracker = owner.getTracker(another);
// can be null
if (tracker == null) return;
tracker.setSpectator(isSpectator);
for (Tag display : this.tags) {
if (display.isShown()) {
if (display.isShown(another)) {
display.onOpacityChange(another, isSpectator || tracker.isCrouching());
}
}
}
}
}

View File

@@ -67,6 +67,7 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
Tracker tracker = player.addPlayerToTracker(player);
tracker.setScale(player.scale());
tracker.setCrouching(player.isCrouching());
tracker.setSpectator(player.isSpectator());
plugin.getUnlimitedTagManager().onAddPlayer(player, player);
((AbstractCNPlayer) player).setPreviewing(true);
}
@@ -179,6 +180,14 @@ public class UnlimitedTagManagerImpl implements UnlimitedTagManager, JoinQuitLis
}
}
@Override
public void onPlayerGameModeChange(CNPlayer owner, CNPlayer viewer, boolean isSpectator) {
TagRendererImpl controller = tagRenderers.get(owner.uuid());
if (controller != null) {
controller.handleGameModeChange(viewer, isSpectator);
}
}
private void loadConfig() {
plugin.getConfigManager().saveResource("configs" + File.separator + "nameplate.yml");
YamlDocument document = plugin.getConfigManager().loadData(new File(plugin.getDataDirectory().toFile(), "configs" + File.separator + "nameplate.yml"));

View File

@@ -1,7 +1,6 @@
# Requirements for sending the bubble
sender-requirements:
permission: bubbles.send
'!gamemode': spectator
potion-effect: "INVISIBILITY<0"
viewer-requirements: