mirror of
https://github.com/Minestom/Minestom.git
synced 2024-09-29 06:57:28 +02:00
Add viewer fallback for non-entities
Signed-off-by: TheMode <themode@outlook.fr>
This commit is contained in:
parent
5b63636e92
commit
d919e1b60d
@ -214,14 +214,38 @@ public final class ViewEngine {
|
|||||||
@Override
|
@Override
|
||||||
public int size() {
|
public int size() {
|
||||||
synchronized (mutex) {
|
synchronized (mutex) {
|
||||||
return manualViewers.size() + viewableOption.bitSet.size();
|
int size = manualViewers.size();
|
||||||
|
if (entity != null) return size + viewableOption.bitSet.size();
|
||||||
|
// Non-entity fallback
|
||||||
|
final List<List<Player>> auto = ViewEngine.this.viewableOption.references;
|
||||||
|
if (auto != null) {
|
||||||
|
for (List<Player> players : auto) {
|
||||||
|
if (players.isEmpty()) continue;
|
||||||
|
for (Player player : players) {
|
||||||
|
if (validAutoViewer(player)) size++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
synchronized (mutex) {
|
synchronized (mutex) {
|
||||||
return manualViewers.isEmpty() && viewableOption.bitSet.isEmpty();
|
if (!manualViewers.isEmpty()) return false;
|
||||||
|
if (entity != null) return viewableOption.bitSet.isEmpty();
|
||||||
|
// Non-entity fallback
|
||||||
|
final List<List<Player>> auto = ViewEngine.this.viewableOption.references;
|
||||||
|
if (auto != null) {
|
||||||
|
for (List<Player> players : auto) {
|
||||||
|
if (players.isEmpty()) continue;
|
||||||
|
for (Player player : players) {
|
||||||
|
if (validAutoViewer(player)) return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,14 +253,23 @@ public final class ViewEngine {
|
|||||||
public boolean contains(Object o) {
|
public boolean contains(Object o) {
|
||||||
if (!(o instanceof Player player)) return false;
|
if (!(o instanceof Player player)) return false;
|
||||||
synchronized (mutex) {
|
synchronized (mutex) {
|
||||||
return manualViewers.contains(player) || viewableOption.isRegistered(player);
|
if (manualViewers.contains(player)) return true;
|
||||||
|
if (entity != null) return viewableOption.isRegistered(player);
|
||||||
|
// Non-entity fallback
|
||||||
|
final List<List<Player>> auto = ViewEngine.this.viewableOption.references;
|
||||||
|
if (auto != null) {
|
||||||
|
for (List<Player> players : auto) {
|
||||||
|
if (players.isEmpty()) continue;
|
||||||
|
if (players.contains(player) && validAutoViewer(player)) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void forEach(Consumer<? super Player> action) {
|
public void forEach(Consumer<? super Player> action) {
|
||||||
synchronized (mutex) {
|
synchronized (mutex) {
|
||||||
// Manual viewers
|
|
||||||
if (!manualViewers.isEmpty()) manualViewers.forEach(action);
|
if (!manualViewers.isEmpty()) manualViewers.forEach(action);
|
||||||
// Auto
|
// Auto
|
||||||
final List<List<Player>> auto = ViewEngine.this.viewableOption.references;
|
final List<List<Player>> auto = ViewEngine.this.viewableOption.references;
|
||||||
|
Loading…
Reference in New Issue
Block a user