Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,8 @@ public BlockHologramData copy(String name) {
.setVisibilityDistance(getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(getLinkedNpcName());
.setLinkedNpcName(getLinkedNpcName())
.setYOffset(this.getYOffset());

return blockHologramData;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,8 @@ public DisplayHologramData copy(String name) {
.setVisibilityDistance(this.getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(this.getLinkedNpcName());
.setLinkedNpcName(this.getLinkedNpcName())
.setYOffset(this.getYOffset());

return displayHologramData;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public class HologramData implements YamlData {
public static final Visibility DEFAULT_VISIBILITY = Visibility.ALL;
public static final boolean DEFAULT_IS_VISIBLE = true;
public static final boolean DEFAULT_PERSISTENCE = true;
public static final float DEFAULT_Y_OFFSET = 0.0f;

private final String name;
private final HologramType type;
Expand All @@ -28,6 +29,7 @@ public class HologramData implements YamlData {
private Visibility visibility = DEFAULT_VISIBILITY;
private boolean persistent = DEFAULT_PERSISTENCE;
private String linkedNpcName;
private float yOffset = DEFAULT_Y_OFFSET;

/**
* @param name Name of hologram
Expand Down Expand Up @@ -134,6 +136,19 @@ public HologramData setLinkedNpcName(String linkedNpcName) {
return this;
}

public float getYOffset() {
return yOffset;
}

public HologramData setYOffset(float yOffset) {
if (Float.compare(this.yOffset, yOffset) != 0) {
this.yOffset = yOffset;
setHasChanges(true);
}

return this;
}

@Override
public boolean read(ConfigurationSection section, String name) {
String worldName = section.getString("location.world", "world");
Expand All @@ -158,6 +173,7 @@ public boolean read(ConfigurationSection section, String name) {
return visibleByDefault ? Visibility.ALL : Visibility.PERMISSION_REQUIRED;
});
linkedNpcName = section.getString("linkedNpc");
yOffset = (float) section.getDouble("y_offset", DEFAULT_Y_OFFSET);

return true;
}
Expand All @@ -176,6 +192,7 @@ public boolean write(ConfigurationSection section, String name) {
section.set("visibility", visibility.name());
section.set("persistent", persistent);
section.set("linkedNpc", linkedNpcName);
section.set("y_offset", yOffset);

return true;
}
Expand All @@ -185,6 +202,7 @@ public HologramData copy(String name) {
.setVisibilityDistance(this.getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(this.getLinkedNpcName());
.setLinkedNpcName(this.getLinkedNpcName())
.setYOffset(this.getYOffset());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ public ItemHologramData copy(String name) {
.setVisibilityDistance(this.getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(this.getLinkedNpcName());
.setLinkedNpcName(this.getLinkedNpcName())
.setYOffset(this.getYOffset());

return itemHologramData;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,8 @@ public TextHologramData copy(String name) {
.setVisibilityDistance(this.getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(this.getLinkedNpcName());
.setLinkedNpcName(this.getLinkedNpcName())
.setYOffset(this.getYOffset());

return textHologramData;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,8 @@ public BlockHologramData copy(String name) {
.setVisibilityDistance(getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(getLinkedNpcName());
.setLinkedNpcName(getLinkedNpcName())
.setYOffset(this.getYOffset());

return blockHologramData;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,8 @@ public DisplayHologramData copy(String name) {
.setVisibilityDistance(this.getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(this.getLinkedNpcName());
.setLinkedNpcName(this.getLinkedNpcName())
.setYOffset(this.getYOffset());

return displayHologramData;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public class HologramData implements YamlData {
public static final Visibility DEFAULT_VISIBILITY = Visibility.ALL;
public static final boolean DEFAULT_IS_VISIBLE = true;
public static final boolean DEFAULT_PERSISTENCE = true;
public static final float DEFAULT_Y_OFFSET = 0.0f;
protected final @NotNull HologramTraitTrait traitTrait;
private final String name;
private final HologramType type;
Expand All @@ -36,6 +37,7 @@ public class HologramData implements YamlData {
private Visibility visibility = DEFAULT_VISIBILITY;
private boolean persistent = DEFAULT_PERSISTENCE;
private String linkedNpcName;
private float yOffset = DEFAULT_Y_OFFSET;

/**
* @param name Name of hologram
Expand Down Expand Up @@ -197,6 +199,19 @@ public HologramData setLinkedNpcName(String linkedNpcName) {
return this;
}

public float getYOffset() {
return yOffset;
}

public HologramData setYOffset(float yOffset) {
if (Float.compare(this.yOffset, yOffset) != 0) {
this.yOffset = yOffset;
setHasChanges(true);
}

return this;
}

@ApiStatus.Experimental
public @NotNull HologramTraitTrait getTraitTrait() {
return traitTrait;
Expand Down Expand Up @@ -242,6 +257,7 @@ public boolean read(ConfigurationSection section, String name) {
return visibleByDefault ? Visibility.ALL : Visibility.PERMISSION_REQUIRED;
});
linkedNpcName = section.getString("linkedNpc");
yOffset = (float) section.getDouble("y_offset", DEFAULT_Y_OFFSET);

return true;
}
Expand All @@ -261,6 +277,7 @@ public boolean write(ConfigurationSection section, String name) {
section.set("visibility", visibility.name());
section.set("persistent", persistent);
section.set("linkedNpc", linkedNpcName);
section.set("y_offset", yOffset);

return true;
}
Expand All @@ -270,6 +287,7 @@ public HologramData copy(String name) {
.setVisibilityDistance(this.getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(this.getLinkedNpcName());
.setLinkedNpcName(this.getLinkedNpcName())
.setYOffset(this.getYOffset());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,8 @@ public ItemHologramData copy(String name) {
.setVisibilityDistance(this.getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(this.getLinkedNpcName());
.setLinkedNpcName(this.getLinkedNpcName())
.setYOffset(this.getYOffset());

return itemHologramData;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,7 +232,8 @@ public TextHologramData copy(String name) {
.setVisibilityDistance(this.getVisibilityDistance())
.setVisibility(this.getVisibility())
.setPersistent(this.isPersistent())
.setLinkedNpcName(this.getLinkedNpcName());
.setLinkedNpcName(this.getLinkedNpcName())
.setYOffset(this.getYOffset());

return textHologramData;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ public enum HologramModification {
POSITION,
SCALE,
TRANSLATION,
Y_OFFSET,
BILLBOARD,
BACKGROUND,
TEXT_SHADOW,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ public final class HologramCMD extends Command {
<%primary_color%>- /hologram edit <hologram> textShadow <true|false> <dark_gray>- <white>Enables/disables the text shadow
<%primary_color%>- /hologram edit <hologram> textAlignment <alignment> <dark_gray>- <white>Sets the text alignment
<%primary_color%>- /hologram edit <hologram> seeThrough <true|false> <dark_gray>- <white>Enables/disables whether the text can be seen through blocks
<%primary_color%>- /hologram edit <hologram> yOffset <value> <dark_gray>- <white>Adjusts the NPC y offset
<%primary_color%>- /hologram edit <hologram> shadowRadius <value> <dark_gray>- <white>Changes the shadow radius of the hologram
<%primary_color%>- /hologram edit <hologram> shadowStrength <value> <dark_gray>- <white>Changes the shadow strength of the hologram
<%primary_color%>- /hologram edit <hologram> brightness <block|sky> <0-15> <dark_gray>- <white>Changes the brightness of the hologram
Expand Down Expand Up @@ -196,7 +197,7 @@ public boolean execute(@NotNull CommandSender sender, @NotNull String label, @No

final var usingNpcs = PluginUtils.isFancyNpcsEnabled();

List<String> suggestions = new ArrayList<>(Arrays.asList("moveDown", "moveUp", "glowing", "traits", "position", "moveHere", "center", "moveTo", "rotate", "rotatepitch", "billboard", "scale", "translate", "visibilityDistance", "visibility", "shadowRadius", "shadowStrength", "brightness", usingNpcs ? "linkWithNpc" : "", usingNpcs ? "unlinkWithNpc" : ""));
List<String> suggestions = new ArrayList<>(Arrays.asList("moveDown", "moveUp", "glowing", "traits", "position", "moveHere", "center", "moveTo", "rotate", "rotatepitch", "billboard", "scale", "translate", "visibilityDistance", "visibility", "yOffset", "shadowRadius", "shadowStrength", "brightness", usingNpcs ? "linkWithNpc" : "", usingNpcs ? "unlinkWithNpc" : ""));
suggestions.addAll(type.getCommands());

return suggestions.stream().filter(input -> input.toLowerCase().startsWith(args[2].toLowerCase(Locale.ROOT))).toList();
Expand Down Expand Up @@ -374,6 +375,7 @@ private boolean edit(@NotNull final CommandSender player, @NotNull final Hologra
case "updatetextinterval" -> new UpdateTextIntervalCMD().run(player, hologram, args);
case "visibilitydistance" -> new VisibilityDistanceCMD().run(player, hologram, args);
case "visibility" -> new VisibilityCMD().run(player, hologram, args);
case "yoffset" -> new YOffsetCMD().run(player, hologram, args);
case "linkwithnpc" -> new LinkWithNpcCMD().run(player, hologram, args);
case "shadowradius" -> new ShadowRadiusCMD().run(player, hologram, args);
case "shadowstrength" -> new ShadowStrengthCMD().run(player, hologram, args);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
package com.fancyinnovations.fancyholograms.commands.hologram;

import com.google.common.primitives.Floats;
import com.fancyinnovations.fancyholograms.api.events.HologramUpdateEvent;
import com.fancyinnovations.fancyholograms.api.hologram.Hologram;
import com.fancyinnovations.fancyholograms.commands.HologramCMD;
import com.fancyinnovations.fancyholograms.commands.Subcommand;
import com.fancyinnovations.fancyholograms.main.FancyHologramsPlugin;
import de.oliver.fancylib.MessageHelper;
import org.bukkit.command.CommandSender;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.List;

public class YOffsetCMD implements Subcommand {

@Override
public List<String> tabcompletion(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) {
return null;
}

@Override
public boolean run(@NotNull CommandSender player, @Nullable Hologram hologram, @NotNull String[] args) {
if (!(player.hasPermission("fancyholograms.hologram.edit.y_offset"))) {
MessageHelper.error(player, "You don't have the required permission to edit a hologram");
return false;
}

final var offset = Floats.tryParse(args[3]);

if (offset == null) {
MessageHelper.error(player, "Could not parse Y offset");
return false;
}

if (Float.compare(offset, hologram.getData().getYOffset()) == 0) {
MessageHelper.warning(player, "This hologram already has this Y offset");
return false;
}

final var copied = hologram.getData().copy(hologram.getData().getName());
copied.setYOffset(offset);

if (!HologramCMD.callModificationEvent(hologram, player, copied, HologramUpdateEvent.HologramModification.Y_OFFSET)) {
return false;
}

if (Float.compare(copied.getYOffset(), hologram.getData().getYOffset()) == 0) {
MessageHelper.warning(player, "This hologram already has this Y offset");
return false;
}

hologram.getData().setYOffset(copied.getYOffset());

if (hologram.getData().getLinkedNpcName() != null) {
FancyHologramsPlugin.get().getControllerImpl().syncHologramWithNpc(hologram);
}

if (FancyHologramsPlugin.get().getHologramConfiguration().isSaveOnChangedEnabled()) {
FancyHologramsPlugin.get().getStorage().save(hologram.getData());
}

MessageHelper.success(player, "Changed Y offset");
return true;
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -198,7 +198,9 @@ public void syncHologramWithNpc(@NotNull final Hologram hologram) {
displayData.setScale(new Vector3f(npcScale));
}

Location location = npc.getData().getLocation().clone().add(0, (npc.getEyeHeight() * npcScale) + (0.5 * npcScale), 0);
float yOffset = hologram.getData().getYOffset();

Location location = npc.getData().getLocation().clone().add(0, (npc.getEyeHeight() * npcScale) + (0.5 * npcScale) + yOffset, 0);

for (Map.Entry<NpcAttribute, String> entry : npc.getData().getAttributes().entrySet()) {
NpcAttribute attribute = entry.getKey();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public static JsonHologramData hologramDataToJson(com.fancyinnovations.fancyholo
data.getVisibilityDistance(),
data.getVisibility(),
data.getLinkedNpcName(),
data.getYOffset(),
data.getTraitTrait().getTraits().stream()
.map(HologramTrait::getName)
.toList()
Expand Down Expand Up @@ -177,7 +178,8 @@ public static com.fancyinnovations.fancyholograms.api.data.HologramData fromJson
.setWorldName(data.hologram_data().worldName())// hologram data
.setVisibilityDistance(data.hologram_data().visibilityDistance())
.setVisibility(data.hologram_data().visibility())
.setLinkedNpcName(data.hologram_data().linkedNpcName());
.setLinkedNpcName(data.hologram_data().linkedNpcName())
.setYOffset(data.hologram_data().yOffset() == null ? 0f : data.hologram_data().yOffset());

case ITEM ->
new com.fancyinnovations.fancyholograms.api.data.ItemHologramData(data.hologram_data().name(), loc)
Expand All @@ -192,7 +194,8 @@ public static com.fancyinnovations.fancyholograms.api.data.HologramData fromJson
.setWorldName(data.hologram_data().worldName())// hologram data
.setVisibilityDistance(data.hologram_data().visibilityDistance())
.setVisibility(data.hologram_data().visibility())
.setLinkedNpcName(data.hologram_data().linkedNpcName());
.setLinkedNpcName(data.hologram_data().linkedNpcName())
.setYOffset(data.hologram_data().yOffset() == null ? 0f : data.hologram_data().yOffset());
case BLOCK ->
new com.fancyinnovations.fancyholograms.api.data.BlockHologramData(data.hologram_data().name(), loc)
.setBlock(Material.getMaterial(data.block_data().block_material())) // block data
Expand All @@ -206,7 +209,8 @@ public static com.fancyinnovations.fancyholograms.api.data.HologramData fromJson
.setWorldName(data.hologram_data().worldName())// hologram data
.setVisibilityDistance(data.hologram_data().visibilityDistance())
.setVisibility(data.hologram_data().visibility())
.setLinkedNpcName(data.hologram_data().linkedNpcName());
.setLinkedNpcName(data.hologram_data().linkedNpcName())
.setYOffset(data.hologram_data().yOffset() == null ? 0f : data.hologram_data().yOffset());
};

for (String traitName : data.hologram_data().traits()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public record JsonHologramData(
Integer visibilityDistance,
Visibility visibility,
String linkedNpcName,
Float yOffset,
List<String> traits
) {
}
Expand Down