Skip to content

Commit 37c6847

Browse files
committed
Getting rid of clickable entities (will need full rework once)
1 parent 6c93075 commit 37c6847

File tree

5 files changed

+65
-132
lines changed

5 files changed

+65
-132
lines changed

src/main/java/eu/decentsoftware/holograms/api/holograms/Hologram.java

Lines changed: 0 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import eu.decentsoftware.holograms.api.actions.ClickType;
99
import eu.decentsoftware.holograms.api.holograms.enums.EnumFlag;
1010
import eu.decentsoftware.holograms.api.holograms.objects.UpdatingHologramObject;
11-
import eu.decentsoftware.holograms.api.nms.NMS;
1211
import eu.decentsoftware.holograms.api.utils.DExecutor;
1312
import eu.decentsoftware.holograms.api.utils.collection.DList;
1413
import eu.decentsoftware.holograms.api.utils.config.FileConfig;
@@ -387,7 +386,6 @@ public void setFacing(float facing) {
387386
@Override
388387
public void setLocation(@NonNull Location location) {
389388
super.setLocation(location);
390-
this.teleportClickableEntitiesAll();
391389
}
392390

393391
/**
@@ -621,7 +619,6 @@ private void showPageTo(@NonNull Player player, @NonNull HologramPage page, int
621619
// Add player to viewers
622620
viewerPages.put(player.getUniqueId(), pageIndex);
623621
viewers.add(player.getUniqueId());
624-
showClickableEntities(player);
625622
}
626623

627624
public void showAll() {
@@ -669,7 +666,6 @@ public void hide(@NonNull Player player) {
669666
HologramPage page = getPage(player);
670667
if (page != null) {
671668
page.getLines().forEach(line -> line.hide(player));
672-
hideClickableEntities(player);
673669
}
674670
viewers.remove(player.getUniqueId());
675671
}
@@ -681,71 +677,6 @@ public void hideAll() {
681677
}
682678
}
683679

684-
public void showClickableEntities(@NonNull Player player) {
685-
HologramPage page = getPage(player);
686-
if (page == null) {
687-
return;
688-
}
689-
690-
// Spawn clickable entities
691-
NMS nms = NMS.getInstance();
692-
int amount = (int) (page.getHeight() / 2) + 1;
693-
Location location = getLocation().clone();
694-
location.setY((int) (location.getY() - (isDownOrigin() ? 0 : page.getHeight())) + 0.5);
695-
for (int i = 0; i < amount; i++) {
696-
int id = page.getClickableEntityId(i);
697-
nms.showFakeEntityArmorStand(player, location, id, true, false, true);
698-
location.add(0, 1.8, 0);
699-
}
700-
}
701-
702-
public void showClickableEntitiesAll() {
703-
if (isEnabled()) {
704-
getViewerPlayers().forEach(this::showClickableEntities);
705-
}
706-
}
707-
708-
public void hideClickableEntities(@NonNull Player player) {
709-
HologramPage page = getPage(player);
710-
if (page == null) {
711-
return;
712-
}
713-
714-
// Despawn clickable entities
715-
NMS nms = NMS.getInstance();
716-
page.getClickableEntityIds().forEach(id -> nms.hideFakeEntities(player, id));
717-
}
718-
719-
public void hideClickableEntitiesAll() {
720-
if (isEnabled()) {
721-
getViewerPlayers().forEach(this::hideClickableEntities);
722-
}
723-
}
724-
725-
public void teleportClickableEntities(@NonNull Player player) {
726-
HologramPage page = getPage(player);
727-
if (page == null) {
728-
return;
729-
}
730-
731-
// Spawn clickable entities
732-
NMS nms = NMS.getInstance();
733-
int amount = (int) (page.getHeight() / 2) + 1;
734-
Location location = getLocation().clone();
735-
location.setY((int) (location.getY() - (isDownOrigin() ? 0 : page.getHeight())) + 0.5);
736-
for (int i = 0; i < amount; i++) {
737-
int id = page.getClickableEntityId(i);
738-
nms.teleportFakeEntity(player, location, id);
739-
location.add(0, 1.8, 0);
740-
}
741-
}
742-
743-
public void teleportClickableEntitiesAll() {
744-
if (isEnabled()) {
745-
getViewerPlayers().forEach(this::teleportClickableEntities);
746-
}
747-
}
748-
749680
/**
750681
* Check whether the given player is in display range of this hologram object.
751682
*
@@ -791,8 +722,6 @@ public boolean isInUpdateRange(@NonNull Player player) {
791722

792723
public void setDownOrigin(boolean downOrigin) {
793724
this.downOrigin = downOrigin;
794-
this.hideClickableEntitiesAll();
795-
this.showClickableEntitiesAll();
796725
}
797726

798727
/*

src/main/java/eu/decentsoftware/holograms/api/holograms/HologramLine.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ public void parseContent() {
236236
type = HologramLineType.ENTITY;
237237
entity = new HologramEntity(content.substring("#ENTITY:".length()));
238238
height = NMS.getInstance().getEntityHeight(entity.getType()) + 0.15;
239-
setOffsetY(-(height + (Version.afterOrEqual(13) ? 0.1 : 0.2)));
239+
setOffsetY(-(height + (Version.afterOrEqual(13) ? 0.1 : 0.2)) + type.getClickableOffsetY());
240240
return;
241241
} else {
242242
type = HologramLineType.TEXT;
@@ -248,7 +248,7 @@ public void parseContent() {
248248
containsAnimations = DECENT_HOLOGRAMS.getAnimationManager().containsAnimations(text);
249249
containsPlaceholders = PAPI.containsPlaceholders(text);
250250
}
251-
setOffsetY(type.getOffsetY());
251+
setOffsetY(type.getClickableOffsetY());
252252
}
253253

254254
@NonNull
@@ -422,25 +422,25 @@ public void show(Player... players) {
422422
if (!isVisible(player) && canShow(player) && isInDisplayRange(player)) {
423423
switch (type) {
424424
case TEXT:
425-
nms.showFakeEntityArmorStand(player, getLocation(), entityIds[0], true, !HologramLineType.HEAD.equals(type), false);
425+
nms.showFakeEntityArmorStand(player, getLocation(), entityIds[0], true, true, true);
426426
nms.updateFakeEntityCustomName(player, getText(player, true), entityIds[0]);
427427
break;
428428
case HEAD:
429429
case SMALLHEAD:
430-
nms.showFakeEntityArmorStand(player, getLocation(), entityIds[0], true, !HologramLineType.HEAD.equals(type), false);
430+
nms.showFakeEntityArmorStand(player, getLocation(), entityIds[0], true, !HologramLineType.HEAD.equals(type), true);
431431
ItemStack itemStack = containsPlaceholders ? HologramItem.parseItemStack(item.getContent(), player) : item.parse();
432432
nms.helmetFakeEntity(player, itemStack, entityIds[0]);
433433
break;
434434
case ICON:
435-
nms.showFakeEntityArmorStand(player, getLocation(), entityIds[0], true, true, false);
435+
nms.showFakeEntityArmorStand(player, getLocation(), entityIds[0], true, true, true);
436436
ItemStack itemStack1 = containsPlaceholders ? HologramItem.parseItemStack(item.getContent(), player) : item.parse();
437437
nms.showFakeEntityItem(player, getLocation(), itemStack1, entityIds[1]);
438438
nms.attachFakeEntity(player, entityIds[0], entityIds[1]);
439439
break;
440440
case ENTITY:
441441
EntityType entityType = new HologramEntity(PAPI.setPlaceholders(player, getEntity().getContent())).getType();
442442
if (entityType == null || !DecentEntityType.isAllowed(entityType)) break;
443-
nms.showFakeEntityArmorStand(player, getLocation(), entityIds[0], true, true, false);
443+
nms.showFakeEntityArmorStand(player, getLocation(), entityIds[0], true, true, true);
444444

445445
if (entity.getType().isAlive()) {
446446
nms.showFakeEntityLiving(player, getLocation(), entityType, entityIds[1]);

src/main/java/eu/decentsoftware/holograms/api/holograms/HologramPage.java

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import eu.decentsoftware.holograms.api.actions.ClickType;
66
import eu.decentsoftware.holograms.api.holograms.enums.EnumFlag;
77
import eu.decentsoftware.holograms.api.holograms.objects.FlagHolder;
8-
import eu.decentsoftware.holograms.api.nms.NMS;
98
import lombok.Getter;
109
import lombok.NonNull;
1110
import lombok.Setter;
@@ -25,10 +24,10 @@ public class HologramPage extends FlagHolder {
2524

2625
private int index;
2726
private final @NonNull Hologram parent;
28-
private final @NonNull List<Integer> clickableEntityIds;
2927
private final @NonNull List<HologramLine> lines;
3028
private final @NonNull Map<ClickType, List<Action>> actions;
3129
protected boolean alwaysFacePlayer;
30+
protected boolean clickable;
3231

3332
/*
3433
* Constructors
@@ -37,7 +36,6 @@ public class HologramPage extends FlagHolder {
3736
public HologramPage(@NonNull Hologram parent, int index) {
3837
this.parent = parent;
3938
this.index = index;
40-
this.clickableEntityIds = new ArrayList<>();
4139
this.lines = new ArrayList<>();
4240
this.actions = new EnumMap<>(ClickType.class);
4341
this.alwaysFacePlayer = parent.isAlwaysFacePlayer();
@@ -75,13 +73,6 @@ public double getHeight() {
7573
return height;
7674
}
7775

78-
public int getClickableEntityId(int index) {
79-
if (index >= clickableEntityIds.size()) {
80-
clickableEntityIds.add(NMS.getInstance().getFreeEntityId());
81-
}
82-
return clickableEntityIds.get(index);
83-
}
84-
8576
@NonNull
8677
public Location getCenter() {
8778
Location center = parent.getLocation().clone();
@@ -288,18 +279,14 @@ public List<HologramLine> getLines() {
288279
*/
289280

290281
public boolean isClickable() {
291-
if (parent.hasFlag(EnumFlag.DISABLE_ACTIONS)) return false;
292-
for (ClickType value : ClickType.values()) {
293-
List<Action> list = actions.get(value);
294-
if (list != null && !list.isEmpty()) {
295-
return true;
296-
}
282+
if (parent.hasFlag(EnumFlag.DISABLE_ACTIONS)) {
283+
return false;
297284
}
298-
return false;
285+
return hasActions();
299286
}
300287

301288
public boolean hasEntity(int eid) {
302-
return clickableEntityIds.contains(eid) || lines.stream().anyMatch(line -> line.getEntityIds()[0] == eid || line.getEntityIds()[1] == eid);
289+
return lines.stream().anyMatch(line -> line.getEntityIds()[0] == eid || line.getEntityIds()[1] == eid);
303290
}
304291

305292
public void addAction(@NonNull ClickType clickType, @NonNull Action action) {
@@ -347,4 +334,19 @@ public List<Action> getActions(@NonNull ClickType clickType) {
347334
return actions.get(clickType);
348335
}
349336

337+
/**
338+
* Check if this page has any actions.
339+
*
340+
* @return True if this page has any actions, false otherwise.
341+
*/
342+
public boolean hasActions() {
343+
for (ClickType value : ClickType.values()) {
344+
List<Action> list = actions.get(value);
345+
if (list != null && !list.isEmpty()) {
346+
return true;
347+
}
348+
}
349+
return false;
350+
}
351+
350352
}

src/main/java/eu/decentsoftware/holograms/api/holograms/enums/HologramLineType.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,19 @@
77
*/
88
@Getter
99
public enum HologramLineType {
10-
UNKNOWN(0),
11-
TEXT(-0.5d),
12-
HEAD(-2.0d),
13-
SMALLHEAD(-1.1875d),
14-
ICON(-0.55d),
15-
ENTITY(0);
10+
UNKNOWN(0, 0),
11+
TEXT(-0.5d, -1.4875d),
12+
HEAD(-2.0d, -2.0d),
13+
SMALLHEAD(-1.1875d, -1.1875d - 0.5d),
14+
ICON(-0.55d, -0.55d - 0.8875d),
15+
ENTITY(0, -1.5d);
1616

1717
private final double offsetY;
18+
private final double clickableOffsetY;
1819

19-
HologramLineType(double offsetY) {
20+
HologramLineType(double offsetY, double clickableOffsetY) {
2021
this.offsetY = offsetY;
22+
this.clickableOffsetY = clickableOffsetY;
2123
}
2224

2325
}

src/main/java/eu/decentsoftware/holograms/api/player/PlayerListener.java

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -14,35 +14,35 @@
1414

1515
public class PlayerListener implements Listener {
1616

17-
private static final DecentHolograms DH = DecentHologramsAPI.get();
18-
19-
@EventHandler
20-
public void onJoin(PlayerJoinEvent e) {
21-
Player player = e.getPlayer();
22-
S.async(() -> DH.getHologramManager().updateVisibility(player));
23-
S.sync(() -> DH.getPacketListener().hook(player));
24-
if (player.hasPermission("dh.admin") && DH.isUpdateAvailable()) {
25-
Lang.sendUpdateMessage(player);
26-
}
27-
}
28-
29-
@EventHandler
30-
public void onQuit(PlayerQuitEvent e) {
31-
Player player = e.getPlayer();
32-
S.async(() -> DH.getHologramManager().onQuit(player));
33-
DH.getPacketListener().unhook(player);
34-
}
35-
36-
@EventHandler
37-
public void onRespawn(PlayerRespawnEvent e) {
38-
Player player = e.getPlayer();
39-
S.async(() -> DH.getHologramManager().updateVisibility(player));
40-
}
41-
42-
@EventHandler
43-
public void onTeleport(PlayerTeleportEvent e) {
44-
Player player = e.getPlayer();
45-
S.async(() -> DH.getHologramManager().updateVisibility(player));
46-
}
17+
private static final DecentHolograms DH = DecentHologramsAPI.get();
18+
19+
@EventHandler
20+
public void onJoin(PlayerJoinEvent e) {
21+
Player player = e.getPlayer();
22+
S.async(() -> DH.getHologramManager().updateVisibility(player));
23+
S.sync(() -> DH.getPacketListener().hook(player));
24+
if (player.hasPermission("dh.admin") && DH.isUpdateAvailable()) {
25+
Lang.sendUpdateMessage(player);
26+
}
27+
}
28+
29+
@EventHandler
30+
public void onQuit(PlayerQuitEvent e) {
31+
Player player = e.getPlayer();
32+
S.async(() -> DH.getHologramManager().onQuit(player));
33+
DH.getPacketListener().unhook(player);
34+
}
35+
36+
@EventHandler
37+
public void onRespawn(PlayerRespawnEvent e) {
38+
Player player = e.getPlayer();
39+
S.async(() -> DH.getHologramManager().updateVisibility(player));
40+
}
41+
42+
@EventHandler
43+
public void onTeleport(PlayerTeleportEvent e) {
44+
Player player = e.getPlayer();
45+
S.async(() -> DH.getHologramManager().updateVisibility(player));
46+
}
4747

4848
}

0 commit comments

Comments
 (0)