Skip to content

Commit

Permalink
Persistent, Inpersistent(temporary) holograms (#96)
Browse files Browse the repository at this point in the history
* persistent, non-persistent holograms

* don't clear temporary holograms on reload

* refactor get hologram methods
  • Loading branch information
UsainSrht authored Jun 1, 2024
1 parent ddcad9b commit 4d19e1d
Show file tree
Hide file tree
Showing 8 changed files with 33 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ public interface HologramManager {

Optional<Hologram> getHologram(String name);

Collection<Hologram> getPersistentHolograms();

Collection<Hologram> getHolograms();

void addHologram(Hologram hologram);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,20 @@ public final class HologramData implements Data {
@NotNull
private final Data typeData;

private final boolean persistent;


/**
* Constructs a new HologramData with the given name.
*
* @param name the name of the hologram
*/
public HologramData(@NotNull String name, @NotNull DisplayHologramData displayData, @NotNull HologramType type, @NotNull Data typeData) {
public HologramData(@NotNull String name, @NotNull DisplayHologramData displayData, @NotNull HologramType type, @NotNull Data typeData, boolean persistent) {
this.name = name;
this.displayData = displayData;
this.type = type;
this.typeData = typeData;
this.persistent = persistent;
}


Expand All @@ -46,6 +49,7 @@ public HologramData(@NotNull final String name, @NotNull final HologramData othe
this.displayData = (DisplayHologramData) other.getDisplayData().copy();
this.type = other.getType();
this.typeData = other.getTypeData().copy();
this.persistent = other.isPersistent();
}

@Override
Expand Down Expand Up @@ -78,6 +82,10 @@ public void read(ConfigurationSection section, String name) {
return typeData;
}

public boolean isPersistent() {
return persistent;
}

/**
* Returns a copy of this HologramData.
*
Expand Down
20 changes: 15 additions & 5 deletions src/main/java/de/oliver/fancyholograms/HologramManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,17 @@ public final class HologramManagerImpl implements HologramManager {
return Collections.unmodifiableCollection(this.holograms.values());
}

/**
* Returns a read-only view of the currently loaded persistent holograms.
*
* @return A read-only collection of holograms.
*/
@Override
public @NotNull
@UnmodifiableView Collection<Hologram> getPersistentHolograms() {
return this.holograms.values().stream().filter(hologram -> hologram.getData().isPersistent()).toList();
}


/**
* Finds a hologram by name.
Expand Down Expand Up @@ -128,7 +139,7 @@ public void saveHolograms() {
return;
}

plugin.getHologramStorage().saveBatch(getHolograms(), true);
plugin.getHologramStorage().saveBatch(getPersistentHolograms(), true);
}

public void loadHolograms() {
Expand Down Expand Up @@ -204,11 +215,10 @@ public void reloadHolograms() {
private void clearHolograms() {
final var online = List.copyOf(Bukkit.getOnlinePlayers());

final var holograms = Map.copyOf(this.holograms);

this.holograms.clear();
final var holograms = getPersistentHolograms();

for (final var hologram : holograms.values()) {
for (final var hologram : holograms) {
this.holograms.remove(hologram.getData().getName());
FancyHolograms.get().getScheduler().runTaskAsynchronously(() -> hologram.hideHologram(online));
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String label, @No
displayData.setScale(new Vector3f(.5f, .5f, .5f));
displayData.setVisibilityDistance(100);

HologramData data = new HologramData("holo-" + n, displayData, HologramType.TEXT, textData);
HologramData data = new HologramData("holo-" + n, displayData, HologramType.TEXT, textData, true);
Hologram hologram = this.plugin.getHologramsManager().create(data);
hologram.createHologram();
hologram.checkAndUpdateShownStateForPlayer(p);
Expand Down Expand Up @@ -101,7 +101,7 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String label, @No
displayData.setShadowStrength(3);
displayData.setVisibilityDistance(100);

HologramData data = new HologramData("holo-test1", displayData, HologramType.TEXT, textData);
HologramData data = new HologramData("holo-test1", displayData, HologramType.TEXT, textData, true);
Hologram hologram = this.plugin.getHologramsManager().create(data);
hologram.createHologram();
hologram.checkAndUpdateShownStateForPlayer(p);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String label, @No
return Collections.emptyList();
}

return this.plugin.getHologramsManager().getHolograms().stream().map(hologram -> hologram.getData().getName()).filter(input -> input.toLowerCase().startsWith(args[1].toLowerCase(Locale.ROOT))).toList();
return this.plugin.getHologramsManager().getPersistentHolograms().stream().map(hologram -> hologram.getData().getName()).filter(input -> input.toLowerCase().startsWith(args[1].toLowerCase(Locale.ROOT))).toList();
}

final var hologram = this.plugin.getHologramsManager().getHologram(args[1]).orElse(null);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ public boolean run(@NotNull CommandSender sender, @Nullable Hologram hologram, @
}


final var data = new HologramData(name, displayData, type, typeData);
final var data = new HologramData(name, displayData, type, typeData, true);

final var holo = FancyHolograms.get().getHologramsManager().create(data);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ public List<String> tabcompletion(@NotNull CommandSender player, @Nullable Holog

@Override
public boolean run(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) {
final var holograms = FancyHolograms.get().getHologramsManager().getHolograms();
final var holograms = FancyHolograms.get().getHologramsManager().getPersistentHolograms();

if (holograms.isEmpty()) {
MessageHelper.warning(player, "There are no holograms. Use '/hologram create' to create one");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ private List<Hologram> readHolograms(File configFile) {

typeData.read(holoSection, name);

HologramData data = new HologramData(name, displayData, type, typeData);
HologramData data = new HologramData(name, displayData, type, typeData, true);

Hologram hologram = FancyHolograms.get().getHologramManager().create(data);
holograms.add(hologram);
Expand Down Expand Up @@ -279,7 +279,7 @@ public static HologramData readHologram(String name, ConfigurationSection config

TextHologramData textData = new TextHologramData(text, background, textAlignment, textHasShadow, isSeeThrough, textUpdateInterval);

return new HologramData(name, displayData, HologramType.TEXT, textData);
return new HologramData(name, displayData, HologramType.TEXT, textData, true);
}
}
}

0 comments on commit 4d19e1d

Please sign in to comment.