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:
@@ -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())) {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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"));
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
# Requirements for sending the bubble
|
||||
sender-requirements:
|
||||
permission: bubbles.send
|
||||
'!gamemode': spectator
|
||||
potion-effect: "INVISIBILITY<0"
|
||||
|
||||
viewer-requirements:
|
||||
|
||||
Reference in New Issue
Block a user