diff --git a/README.md b/README.md
index f7fd4f16..21facff4 100644
--- a/README.md
+++ b/README.md
@@ -142,4 +142,5 @@ You really need to call GameSabotageDeactivateEvent when it's done.
## Alte recomandari
- decrease player tracking range
+- command to kill invisible armor_stands (holograms) on your maps during setup session `/kill @e[type=armor_stand,nbt={Invisible:1b}]`
diff --git a/stevesus-api/pom.xml b/stevesus-api/pom.xml
index 062978a4..f0f25b7d 100644
--- a/stevesus-api/pom.xml
+++ b/stevesus-api/pom.xml
@@ -11,6 +11,13 @@
stevesus-api
+
+
+ jitpack.io
+ https://jitpack.io
+
+
+
@@ -40,13 +47,21 @@
1.1-SNAPSHOT
provided
-
+
+
+ com.github.unldenis.holoeasy
+ holoeasy-core
+ 4.3.2
+
+
+
- com.andrei1058.hologramapi
- hologram-api
- [1.0-SNAPSHOT,)
+ com.github.retrooper
+ packetevents-spigot
+ 2.7.0
provided
+
com.andrei1058.spigot.versionsupport
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/PlayerCorpse.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/PlayerCorpse.java
index d0a8ecd8..273894dc 100644
--- a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/PlayerCorpse.java
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/PlayerCorpse.java
@@ -1,6 +1,6 @@
package com.andrei1058.stevesus.api.arena;
-import com.andrei1058.hologramapi.Hologram;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
import org.bukkit.Location;
import org.jetbrains.annotations.Nullable;
@@ -37,7 +37,7 @@ public interface PlayerCorpse {
/**
* Get hologram to hide/ show it when necessary.
*/
- @Nullable Hologram getHologram();
+ @Nullable HologramI getHologram();
/**
* Check if the given location is in corpse's range.
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/meeting/MeetingButton.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/meeting/MeetingButton.java
index fd76c91a..2aa9c0bf 100644
--- a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/meeting/MeetingButton.java
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/meeting/MeetingButton.java
@@ -1,24 +1,24 @@
package com.andrei1058.stevesus.api.arena.meeting;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.api.SteveSusAPI;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.team.Team;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Message;
import com.andrei1058.stevesus.common.api.arena.GameState;
import com.andrei1058.stevesus.common.gui.ItemUtil;
import org.bukkit.Location;
-import org.bukkit.Particle;
import org.bukkit.World;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.metadata.FixedMetadataValue;
import org.bukkit.plugin.Plugin;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import java.util.UUID;
@@ -28,16 +28,18 @@ public class MeetingButton {
// use this to identify armor stand entity
public static final String MEETING_BUTTON_META_DATA_KEY = "mbtnss";
- private final Hologram buttonHologram;
+ private @Nullable HologramI buttonHologram = null;
private long lastUsage;
- private final List particleLocations;
+ private List particleLocations = new ArrayList<>();
private int currentEntry = -1;
private UUID lastRequester;
public MeetingButton(Plugin plugin, Location location, Arena arena) {
location.setX(location.getBlockX() + 0.5);
location.setZ(location.getBlockZ() + 0.5);
- ArmorStand buttonKeeper = location.getWorld().spawn(location.clone().subtract(0, 1.5, 0), ArmorStand.class);
+ ArmorStand buttonKeeper = location.getWorld().spawn(
+ location.clone().subtract(0, 1.5, 0), ArmorStand.class
+ );
buttonKeeper.setRemoveWhenFarAway(false);
buttonKeeper.setVisible(false);
buttonKeeper.setGravity(false);
@@ -45,22 +47,31 @@ public MeetingButton(Plugin plugin, Location location, Arena arena) {
buttonKeeper.setHelmet(meetingHead);
buttonKeeper.setMetadata(MEETING_BUTTON_META_DATA_KEY, new FixedMetadataValue(plugin, arena.getGameId()));
- buttonHologram = new Hologram(location.clone().add(0, 1.5, 0), 3);
- HologramPage page = buttonHologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> SteveSusAPI.getInstance().getLocaleHandler().getMsg(s, Message.EMERGENCY_BUTTON_HOLO1)));
- page.setLineContent(1, new LineTextContent(s -> arena.getMeetingStage() == MeetingStage.NO_MEETING ? SteveSusAPI.getInstance().getLocaleHandler().getMsg(s, Message.EMERGENCY_BUTTON_HOLO2) : " "));
- page.setLineContent(2, new LineTextContent(s -> {
- if (arena.getMeetingStage() == MeetingStage.TALKING) {
- return SteveSusAPI.getInstance().getLocaleHandler().getMsg(s, Message.EMERGENCY_BUTTON_STATUS_VOTING_STARTS_IN).replace("{time}", String.valueOf(arena.getCountdown()));
- } else if (arena.getMeetingStage() == MeetingStage.VOTING) {
- return SteveSusAPI.getInstance().getLocaleHandler().getMsg(s, Message.EMERGENCY_BUTTON_STATUS_VOTING_ENDS_IN).replace("{time}", String.valueOf(arena.getCountdown()));
- }
- return SteveSusAPI.getInstance().getLocaleHandler().getMsg(s, Message.EMERGENCY_BUTTON_STATUS_YOUR_MEETINGS_LEFT).replace("{amount}", String.valueOf(arena.getMeetingsLeft(s)));
- }));
+ if (null != HologramManager.getInstance().getProvider()) {
+ buttonHologram = HologramManager.getInstance().getProvider().spawnHologram(location);
+
+ var localeHandler = SteveSusAPI.getInstance().getLocaleHandler();
+ buttonHologram.setPageContent(Arrays.asList(
+ receiver -> localeHandler.getMsg(receiver, Message.EMERGENCY_BUTTON_HOLO1),
+ receiver -> arena.getMeetingStage() == MeetingStage.NO_MEETING ?
+ localeHandler.getMsg(receiver, Message.EMERGENCY_BUTTON_HOLO2) :
+ " ",
+ receiver -> {
+ if (arena.getMeetingStage() == MeetingStage.TALKING) {
+ return localeHandler.getMsg(receiver, Message.EMERGENCY_BUTTON_STATUS_VOTING_STARTS_IN)
+ .replace("{time}", String.valueOf(arena.getCountdown()));
+ } else if (arena.getMeetingStage() == MeetingStage.VOTING) {
+ return localeHandler.getMsg(receiver, Message.EMERGENCY_BUTTON_STATUS_VOTING_ENDS_IN)
+ .replace("{time}", String.valueOf(arena.getCountdown()));
+ }
+ return localeHandler.getMsg(receiver, Message.EMERGENCY_BUTTON_STATUS_YOUR_MEETINGS_LEFT)
+ .replace("{amount}", String.valueOf(arena.getMeetingsLeft(receiver)));
+ }
+ ));
+ buttonHologram.hideToAll();
+ }
this.particleLocations = getCircle(location.clone().add(0, 0.3, 0), 0.6, 15);
- buttonHologram.hide();
}
/**
@@ -77,8 +88,15 @@ public void refreshLines(Arena arena) {
}
}
- public void onGameStart() {
- buttonHologram.show();
+ public void onGameStart(Arena arena) {
+ if (null != buttonHologram && null != arena) {
+ arena.getPlayers().forEach(
+ player -> buttonHologram.showToPlayer(player)
+ );
+ arena.getSpectators().forEach(
+ spectator -> buttonHologram.showToPlayer(spectator)
+ );
+ }
}
/**
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/securitycamera/SecurityMonitor.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/securitycamera/SecurityMonitor.java
index 9f7b6df4..a3ed933c 100644
--- a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/securitycamera/SecurityMonitor.java
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/securitycamera/SecurityMonitor.java
@@ -1,49 +1,57 @@
package com.andrei1058.stevesus.api.arena.securitycamera;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.HologramClickListener;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.api.SteveSusAPI;
-import com.andrei1058.stevesus.api.arena.Arena;
-import com.andrei1058.stevesus.api.arena.team.Team;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Message;
import org.bukkit.Location;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.Arrays;
public class SecurityMonitor {
- private static HologramClickListener clickListener;
+// private static HologramClickListener clickListener;
private final Location location;
- private Hologram hologram;
+ private @Nullable HologramI hologram;
public SecurityMonitor(Location location){
this.location = location;
- this.hologram = new Hologram(location, 2);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(player -> SteveSusAPI.getInstance().getLocaleHandler().getMsg(player, Message.SECURITY_MONITOR_HOLOGRAM_LINE1)));
- page.setLineContent(1, new LineTextContent(player -> SteveSusAPI.getInstance().getLocaleHandler().getMsg(player, Message.SECURITY_MONITOR_HOLOGRAM_LINE2)));
-
- if (clickListener == null){
- clickListener = (player, lineClickType) -> {
- Arena arena = SteveSusAPI.getInstance().getArenaHandler().getArenaByPlayer(player);
- if (arena == null) return;
- if (arena.getCamHandler() == null) return;
- if (arena.getCamHandler().getCams().isEmpty()) return;
- if (arena.isSpectator(player)) return;
- Team playerTeam = arena.getPlayerTeam(player);
- if (playerTeam == null) return;
- if (playerTeam.getIdentifier().endsWith("-ghost")) return;
- arena.getCamHandler().startWatching(player, arena, arena.getCamHandler().getCams().get(0));
- };
+
+ var holoManager = HologramManager.getInstance().getProvider();
+
+ if (null != holoManager) {
+ this.hologram = holoManager.spawnHologram(location);
+
+ var langManager = SteveSusAPI.getInstance().getLocaleHandler();
+ this.hologram.setPageContent(Arrays.asList(
+ player -> langManager.getMsg(player, Message.SECURITY_MONITOR_HOLOGRAM_LINE1),
+ player -> langManager.getMsg(player, Message.SECURITY_MONITOR_HOLOGRAM_LINE2)
+ ));
}
- hologram.allowCollisions(true);
- hologram.setClickListener(clickListener);
+ // fixme
+// if (clickListener == null){
+// clickListener = (player, lineClickType) -> {
+// Arena arena = SteveSusAPI.getInstance().getArenaHandler().getArenaByPlayer(player);
+// if (arena == null) return;
+// if (arena.getCamHandler() == null) return;
+// if (arena.getCamHandler().getCams().isEmpty()) return;
+// if (arena.isSpectator(player)) return;
+// Team playerTeam = arena.getPlayerTeam(player);
+// if (playerTeam == null) return;
+// if (playerTeam.getIdentifier().endsWith("-ghost")) return;
+// arena.getCamHandler().startWatching(player, arena, arena.getCamHandler().getCams().get(0));
+// };
+// }
+
+ // fixme
+// hologram.allowCollisions(true);
+// hologram.setClickListener(clickListener);
}
- public Hologram getHologram() {
+ public @Nullable HologramI getHologram() {
return hologram;
}
@@ -51,7 +59,7 @@ public Location getLocation() {
return location;
}
- public void setHologram(Hologram hologram) {
+ public void setHologram(@Nullable HologramI hologram) {
this.hologram = hologram;
}
}
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/vent/Vent.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/vent/Vent.java
index c76fb5e5..5fc0bea0 100644
--- a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/vent/Vent.java
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/arena/vent/Vent.java
@@ -1,15 +1,15 @@
package com.andrei1058.stevesus.api.arena.vent;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.api.SteveSusAPI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Message;
import com.andrei1058.stevesus.common.CommonManager;
import org.bukkit.Location;
import org.bukkit.block.Block;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.LinkedList;
@@ -21,13 +21,12 @@ public class Vent {
private final Location location;
private final LinkedList connections = new LinkedList<>();
private ItemStack displayItem;
- private final Hologram hologram;
+ private @Nullable HologramI hologram;
/**
* Create a vent.
*
* @param identifier unique id.
- * @param block trap block on which players must shift to start venting.
*/
public Vent(@NotNull String identifier, @NotNull Location location, @NotNull ItemStack displayItem) {
this.identifier = identifier;
@@ -35,12 +34,15 @@ public Vent(@NotNull String identifier, @NotNull Location location, @NotNull Ite
this.location.setX(location.getBlockX() + 0.5);
this.location.setZ(location.getBlockZ() + 0.5);
this.displayItem = CommonManager.getINSTANCE().getItemSupport().addTag(displayItem, "nextVent", identifier);
- hologram = new Hologram(location.clone().add(0, 0.5, 0), 1);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> SteveSusAPI.getInstance().getLocaleHandler().getMsg(s, Message.VENT_HOLO)));
- hologram.hide();
- hologram.allowCollisions(false);
+
+ if (null == HologramManager.getInstance().getProvider()) {
+ var holoManager = HologramManager.getInstance().getProvider();
+ hologram = holoManager.spawnHologram(location.clone().add(0, 0.5, 0));
+ hologram.setPageContent(List.of(
+ receiver -> SteveSusAPI.getInstance().getLocaleHandler().getMsg(receiver, Message.VENT_HOLO)
+ ));
+ hologram.hideToAll();
+ }
}
/**
@@ -108,7 +110,7 @@ public boolean equals(Object o) {
return vent.getIdentifier().equals(getIdentifier());
}
- public Hologram getHologram() {
+ public @Nullable HologramI getHologram() {
return hologram;
}
}
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/HologramI.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/HologramI.java
new file mode 100644
index 00000000..8e77ac92
--- /dev/null
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/HologramI.java
@@ -0,0 +1,55 @@
+package com.andrei1058.stevesus.api.hook.hologram;
+
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+
+import java.util.List;
+import java.util.function.Function;
+
+/**
+ * Hologram interface to make it work with any hologram dependency.
+ * Used as Wrapper.
+ */
+public interface HologramI {
+
+ /**
+ * @param pageContent per player lines.
+ */
+ void setPageContent(List> pageContent);
+
+ /**
+ * Make hologram invisible to everyone.
+ */
+ void hideToAll();
+
+ /**
+ * Refresh hologram for given player.
+ */
+
+ void refreshLines(Player player);
+
+ void refreshForAll();
+
+ /**
+ * Toggle {@link #hideToAll()}.
+ */
+ void unHide();
+
+ void showToPlayer(Player player);
+ void hideFromPlayer(Player player);
+
+ /**
+ * Destroy hologram.
+ * Remove any trace of players and worlds etc.
+ */
+ void remove();
+
+ boolean isHiddenFor(Player player);
+
+ Location getLocation();
+
+ /**
+ * Remove any trace of the given player to avoid memory leaks.
+ */
+ void destroyPlayer(Player player);
+}
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/HologramManager.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/HologramManager.java
new file mode 100644
index 00000000..42815255
--- /dev/null
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/HologramManager.java
@@ -0,0 +1,94 @@
+package com.andrei1058.stevesus.api.hook.hologram;
+
+import com.andrei1058.stevesus.api.SteveSusAPI;
+import com.andrei1058.stevesus.api.arena.Arena;
+import com.andrei1058.stevesus.api.hook.hologram.easyholo.EasyHoloAdapter;
+import com.github.retrooper.packetevents.PacketEvents;
+import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.holoeasy.HoloEasy;
+import org.holoeasy.packet.PacketImpl;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.List;
+import java.util.function.Function;
+
+public class HologramManager {
+
+ private static HologramManager instance = new HologramManager();
+ private @Nullable HologramProvider provider;
+
+ private HologramManager() {}
+
+ public static HologramManager getInstance() {
+ return instance;
+ }
+
+ public @Nullable HologramProvider getProvider() {
+ return provider;
+ }
+
+ public void setProvider(@Nullable HologramProvider provider) {
+ this.provider = provider;
+ if (null == provider) {
+ return;
+ }
+ provider.onAdapterInit(SteveSusAPI.getInstance());
+ }
+
+ public void onLoad(Plugin plugin) {
+ var packetEvents = Bukkit.getPluginManager().getPlugin("packetevents");
+ if (null != packetEvents) {
+ // maybe check if enabled and then register
+ PacketEvents.setAPI(SpigotPacketEventsBuilder.build(plugin));
+ //On Bukkit, calling this here is essential, hence the name "load"
+ PacketEvents.getAPI().load();
+ }
+ }
+
+ public void onEnable(Plugin plugin) {
+ var packetEvents = Bukkit.getPluginManager().getPlugin("packetevents");
+ if (null != packetEvents) {
+ //Initialize!
+ PacketEvents.getAPI().init();
+
+ // ** Bind the library
+ HoloEasy.bind(plugin, PacketImpl.PacketEvents);
+ setProvider(new EasyHoloAdapter());
+ }
+ }
+
+ public void onDisable(Plugin plugin) {
+ var packetEvents = Bukkit.getPluginManager().getPlugin("packetevents");
+ if (null != packetEvents) {
+ //Terminate the instance (clean up process)
+ PacketEvents.getAPI().terminate();
+ }
+ }
+
+ public @Nullable HologramI makeUnsafe(Location location, List> list) {
+ if (null == getProvider()) {
+ return null;
+ }
+ var holo = getProvider().spawnHologram(location);
+ holo.setPageContent(list);
+ return holo;
+ }
+
+ public void onArenaLeave(Arena arena, Player player) {
+ if (null == getProvider()) {
+ return;
+ }
+ getProvider().onArenaLeave(arena, player);
+ }
+
+ public void onArenaDestroy(Arena arena) {
+ if (null == getProvider()) {
+ return;
+ }
+ getProvider().onArenaDestroy(arena);
+ }
+}
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/HologramProvider.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/HologramProvider.java
new file mode 100644
index 00000000..b7c69138
--- /dev/null
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/HologramProvider.java
@@ -0,0 +1,24 @@
+package com.andrei1058.stevesus.api.hook.hologram;
+
+import com.andrei1058.stevesus.api.arena.Arena;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+
+public interface HologramProvider {
+ HologramI spawnHologram(Location location);
+
+ /**
+ * Clean up player traces.
+ * Usually used to remove current player from hashmaps etc.
+ *
+ * @param arena game session.
+ * @param player subject.
+ */
+
+ void onArenaLeave(Arena arena, Player player);
+
+ void onAdapterInit(Plugin plugin);
+
+ void onArenaDestroy(Arena arena);
+}
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/easyholo/EasyHolo.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/easyholo/EasyHolo.java
new file mode 100644
index 00000000..21e1c414
--- /dev/null
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/easyholo/EasyHolo.java
@@ -0,0 +1,138 @@
+package com.andrei1058.stevesus.api.hook.hologram.easyholo;
+
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.holoeasy.line.TextLine;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.UUID;
+import java.util.function.Function;
+
+public class EasyHolo implements HologramI {
+
+ private HashMap perPlayer = new HashMap<>();
+ private Location location;
+ private List> pageContent = new ArrayList<>();
+
+ public EasyHolo(@NotNull Location location) {
+ this.location = location;
+ }
+
+ @Override
+ public void setPageContent(List> pageContent) {
+ this.pageContent = pageContent;
+ if (!perPlayer.isEmpty()) {
+ perPlayer.forEach((uuid, holo) -> {
+ var player = Bukkit.getPlayer(uuid);
+ if (player != null) {
+ updateLines(player, holo);
+ }
+ });
+ }
+ }
+
+ @Override
+ public void hideToAll() {
+ perPlayer.forEach((uuid, holo) -> {
+ holo.hide();
+ });
+ }
+
+ @Override
+ public void refreshLines(@NotNull Player player) {
+ var playerHolo = perPlayer.get(player.getUniqueId());
+
+ if (null == playerHolo) {
+ return;
+ }
+
+ updateLines(player, playerHolo);
+ }
+
+ @Override
+ public void refreshForAll() {
+ for (var perPlayer : perPlayer.values()) {
+ perPlayer.getPvt().getSeeingPlayers().forEach(pvt -> {
+ updateLines(pvt, perPlayer);
+ });
+ }
+ }
+
+ @Override
+ public void unHide() {
+ for (var entry : perPlayer.entrySet()) {
+ var player = Bukkit.getPlayer(entry.getKey());
+ if (null == player) {
+ perPlayer.remove(entry.getKey());
+ } else {
+ entry.getValue().show(player);
+ }
+ }
+ }
+
+ @Override
+ public void showToPlayer(@NotNull Player player) {
+ var playerHolo = perPlayer.get(player.getUniqueId());
+ if (playerHolo == null) {
+ playerHolo = createForPlayer(player);
+ }
+ playerHolo.show(player);
+ }
+
+ private @NotNull PerPlayer createForPlayer(@NotNull Player player) {
+ var holo = new PerPlayer(this.location);
+ updateLines(player, holo);
+ perPlayer.put(player.getUniqueId(), holo);
+ return holo;
+ }
+
+ private void updateLines(@NotNull Player player, @NotNull PerPlayer hologram) {
+ hologram.getLines().clear();
+ this.pageContent.forEach(function -> {
+ hologram.getLines().add(new TextLine(hologram, function.apply(player), null, false));
+ });
+ }
+
+ @Override
+ public void hideFromPlayer(@NotNull Player player) {
+ var playerHolo = perPlayer.get(player.getUniqueId());
+ if (playerHolo == null) {
+ return;
+ }
+ playerHolo.hide(player);
+ perPlayer.remove(player.getUniqueId());
+ }
+
+ @Override
+ public void remove() {
+ perPlayer.values().forEach(holo -> {
+ holo.getPvt().getSeeingPlayers().forEach(holo::hide);
+ holo.getLines().clear();
+ holo.getLocation().setWorld(null);
+ });
+ perPlayer.clear();
+ }
+
+ @Override
+ public boolean isHiddenFor(@NotNull Player player) {
+ var holo = perPlayer.get(player.getUniqueId());
+ if (null == holo) {
+ return true;
+ }
+ return !holo.isShownFor(player);
+ }
+
+ public Location getLocation() {
+ return location;
+ }
+
+ @Override
+ public void destroyPlayer(@NotNull Player player) {
+ perPlayer.remove(player.getUniqueId());
+ }
+}
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/easyholo/EasyHoloAdapter.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/easyholo/EasyHoloAdapter.java
new file mode 100644
index 00000000..b2ccadc5
--- /dev/null
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/easyholo/EasyHoloAdapter.java
@@ -0,0 +1,62 @@
+package com.andrei1058.stevesus.api.hook.hologram.easyholo;
+
+import com.andrei1058.stevesus.api.arena.Arena;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramProvider;
+import org.bukkit.Bukkit;
+import org.bukkit.Location;
+import org.bukkit.entity.Player;
+import org.bukkit.plugin.Plugin;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.concurrent.ConcurrentLinkedQueue;
+
+public class EasyHoloAdapter implements HologramProvider {
+
+ private ConcurrentLinkedQueue trackedHolograms = new ConcurrentLinkedQueue<>();
+ private Plugin plugin;
+
+ @Override
+ public HologramI spawnHologram(Location location) {
+ var holo = new EasyHolo(location);
+ trackedHolograms.add(holo);
+ return holo;
+ }
+
+ @Override
+ public void onArenaLeave(@NotNull Arena arena, Player player) {
+ if (null == arena.getWorld()) {
+ return;
+ }
+ Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
+ trackedHolograms.forEach(item -> {
+ var world = item.getLocation().getWorld();
+ if (null != world && world.getName().equals(arena.getWorld().getName())) {
+ item.destroyPlayer(player);
+ }
+ });
+ });
+ }
+
+ @Override
+ public void onAdapterInit(Plugin plugin) {
+ this.plugin = plugin;
+ }
+
+ @Override
+ public void onArenaDestroy(@NotNull Arena arena) {
+ if (null == arena.getWorld()) {
+ return;
+ }
+ Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> {
+ trackedHolograms.forEach(item -> {
+ var world = item.getLocation().getWorld();
+ if (null != world && world.getName().equals(arena.getWorld().getName())) {
+ trackedHolograms.remove(item);
+ item.remove();
+ }
+ });
+ });
+ }
+
+}
diff --git a/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/easyholo/PerPlayer.java b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/easyholo/PerPlayer.java
new file mode 100644
index 00000000..fdff8f4a
--- /dev/null
+++ b/stevesus-api/src/main/java/com/andrei1058/stevesus/api/hook/hologram/easyholo/PerPlayer.java
@@ -0,0 +1,14 @@
+package com.andrei1058.stevesus.api.hook.hologram.easyholo;
+
+import org.bukkit.Location;
+import org.holoeasy.hologram.Hologram;
+import org.jetbrains.annotations.NotNull;
+
+class PerPlayer extends Hologram {
+ public PerPlayer(@NotNull Location location) {
+ super(location, null, null);
+ }
+
+ public void updateHologram() {
+ }
+}
diff --git a/stevesus-common/src/main/java/com/andrei1058/stevesus/common/database/DatabaseManager.java b/stevesus-common/src/main/java/com/andrei1058/stevesus/common/database/DatabaseManager.java
index c00a2c71..205f7541 100644
--- a/stevesus-common/src/main/java/com/andrei1058/stevesus/common/database/DatabaseManager.java
+++ b/stevesus-common/src/main/java/com/andrei1058/stevesus/common/database/DatabaseManager.java
@@ -6,7 +6,6 @@
import com.andrei1058.stevesus.common.api.database.DatabaseService;
import com.andrei1058.stevesus.common.database.adapter.HikariAdapter;
import com.andrei1058.stevesus.common.database.adapter.NoDatabase;
-import com.andrei1058.stevesus.common.database.adapter.SqlLiteAdapter;
import com.andrei1058.stevesus.common.database.config.DatabaseConfig;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
diff --git a/stevesus-plugin/pom.xml b/stevesus-plugin/pom.xml
index 1d2b2d85..7083f76a 100644
--- a/stevesus-plugin/pom.xml
+++ b/stevesus-plugin/pom.xml
@@ -147,13 +147,27 @@
24.2
compile
-
+
- com.andrei1058.hologramapi
- hologram-api
- 1.0-SNAPSHOT
- compile
+ com.github.unldenis.holoeasy
+ holoeasy-core
+ 4.3.2
+
+
+ org.jetbrains.kotlin
+ kotlin-stdlib
+ 1.9.21
+
+
+
+
+
+ com.github.retrooper
+ packetevents-spigot
+ 2.7.0
+ provided
+
com.github.johnnyjayjay
@@ -294,6 +308,26 @@
true
+
+ org.jetbrains.kotlin
+ kotlin-maven-plugin
+ 1.9.21
+
+
+ compile
+ process-sources
+
+ compile
+
+
+
+ src/main/java
+ target/generated-sources/annotations
+
+
+
+
+
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/SteveSusArena.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/SteveSusArena.java
index d8d0823f..7439d62c 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/SteveSusArena.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/SteveSusArena.java
@@ -23,6 +23,7 @@
import com.andrei1058.stevesus.api.arena.vent.Vent;
import com.andrei1058.stevesus.api.arena.vent.VentHandler;
import com.andrei1058.stevesus.api.event.*;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.ChatUtil;
import com.andrei1058.stevesus.api.locale.Locale;
import com.andrei1058.stevesus.api.locale.Message;
@@ -359,6 +360,8 @@ public void disable() {
if (gameTask != -1) {
Bukkit.getScheduler().cancelTask(gameTask);
}
+
+ HologramManager.getInstance().onArenaDestroy(this);
}
@Override
@@ -374,6 +377,7 @@ public void restart() {
GameRestartEvent gameRestartEvent = new GameRestartEvent(getGameId(), this);
Bukkit.getPluginManager().callEvent(gameRestartEvent);
WorldManager.getINSTANCE().getWorldAdapter().onArenaRestart(this);
+ HologramManager.getInstance().onArenaDestroy(this);
}
@Override
@@ -857,6 +861,7 @@ public void removePlayer(Player player, boolean onQuit) {
if (getVentHandler() != null) {
getVentHandler().interruptVenting(player, true);
}
+ HologramManager.getInstance().onArenaLeave(this, player);
SteveSus.debug("Player " + player.getName() + " was removed as player from game " + getGameId() + "(" + getTemplateWorld() + ").");
}
@@ -912,6 +917,7 @@ public void removeSpectator(Player player, boolean onQuit) {
for (GameListener gameListener : gameListeners) {
gameListener.onPlayerLeave(this, player, true);
}
+ HologramManager.getInstance().onArenaLeave(this, player);
SteveSus.debug("Player " + player.getName() + " was removed as spectator from game " + getGameId() + "(" + getTemplateWorld() + ").");
}
@@ -971,7 +977,7 @@ public boolean switchState(GameState gameState) {
getPlayers().forEach(player -> GameSidebarManager.getInstance().setSidebar(player, SidebarType.IN_GAME, this, false));
// refresh meeting button lines
if (getMeetingButton() != null) {
- getMeetingButton().onGameStart();
+ getMeetingButton().onGameStart(this);
getMeetingButton().refreshLines(this);
getMeetingButton().setLastUsage(System.currentTimeMillis());
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/ability/vent/VentListener.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/ability/vent/VentListener.java
index b5106ab1..7e922807 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/ability/vent/VentListener.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/ability/vent/VentListener.java
@@ -17,6 +17,7 @@
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class VentListener implements GameListener {
@@ -83,56 +84,65 @@ public void onPlayerInteractEntity(Arena arena, Player player, Entity entity) {
}
@Override
- public void onGameStateChange(Arena arena, GameState oldState, GameState newState) {
+ public void onGameStateChange(@NotNull Arena arena, GameState oldState, GameState newState) {
if (arena.getVentHandler() == null) return;
if (newState == GameState.IN_GAME) {
for (Vent vent : arena.getVentHandler().getVents()) {
- vent.getHologram().show();
+ if (null == vent.getHologram()) {
+ continue;
+ }
+ vent.getHologram().hideToAll();
for (Team team : arena.getGameTeams()) {
- if (team.isInnocent()) {
- team.getMembers().forEach(mem -> vent.getHologram().hide(mem));
+ if (!team.isInnocent()) {
+ team.getMembers().forEach(mem -> vent.getHologram().showToPlayer(mem));
}
}
- for (Player spectator : arena.getSpectators()) {
- vent.getHologram().hide(spectator);
- }
}
}
}
@Override
- public void onPlayerJoin(Arena arena, Player player) {
+ public void onPlayerJoin(@NotNull Arena arena, Player player) {
if (arena.getVentHandler() == null) return;
if (arena.getGameState() == GameState.IN_GAME) {
for (Vent vent : arena.getVentHandler().getVents()) {
- vent.getHologram().hide(player);
+ if (null == vent.getHologram()){
+ continue;
+ }
+ vent.getHologram().hideFromPlayer(player);
}
}
}
@Override
- public void onPlayerToSpectator(Arena arena, Player player) {
+ public void onPlayerToSpectator(@NotNull Arena arena, Player player) {
if (arena.getVentHandler() == null) return;
for (Vent vent : arena.getVentHandler().getVents()) {
- vent.getHologram().hide(player);
+ if (null == vent.getHologram()){
+ continue;
+ }
+ vent.getHologram().hideFromPlayer(player);
}
}
@Override
- public void onPlayerMove(Arena arena, Player player, Location from, @Nullable Team playerTeam) {
+ public void onPlayerMove(@NotNull Arena arena, Player player, Location from, @Nullable Team playerTeam) {
if (arena.getVentHandler() == null) return;
if (arena.getGameState() != GameState.IN_GAME) return;
if (playerTeam == null) return;
if (playerTeam.isInnocent()) return;
for (Vent vent : arena.getVentHandler().getVents()) {
+ if (null == vent.getHologram()){
+ continue;
+ }
int distance = (int) player.getLocation().distance(vent.getBlock().getLocation());
if (vent.getHologram().isHiddenFor(player)) {
if (distance <= 7) {
- vent.getHologram().show(player);
+ vent.getHologram().showToPlayer(player);
}
} else {
if (distance > 7) {
- vent.getHologram().hide(player);
+ vent.getHologram().hideFromPlayer(player);
}
}
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/emptygarbage/EmptyGarbageTaskProvider.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/emptygarbage/EmptyGarbageTaskProvider.java
index 0bdbb1f0..033d0f69 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/emptygarbage/EmptyGarbageTaskProvider.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/emptygarbage/EmptyGarbageTaskProvider.java
@@ -1,8 +1,5 @@
package com.andrei1058.stevesus.arena.gametask.emptygarbage;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.task.GameTask;
@@ -10,6 +7,8 @@
import com.andrei1058.stevesus.api.arena.task.TaskType;
import com.andrei1058.stevesus.api.glow.GlowColor;
import com.andrei1058.stevesus.api.glow.GlowingBox;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Message;
import com.andrei1058.stevesus.api.server.multiarena.InventoryBackup;
import com.andrei1058.stevesus.api.setup.SetupListener;
@@ -246,7 +245,7 @@ public void onSetupLoad(SetupSession setupSession, String localName, JsonObject
SteveSus.newChain().delay(20).sync(() -> {
List glowingBoxes = new ArrayList<>();
- List holograms = new ArrayList<>();
+ List holograms = new ArrayList<>();
for (JsonElement element : array) {
JsonObject obj = element.getAsJsonObject();
@@ -271,24 +270,34 @@ public void onSetupLoad(SetupSession setupSession, String localName, JsonObject
glowingBoxes.add(glowingBox);
glowingBox.startGlowing(setupSession.getPlayer());
- Hologram hologram = new Hologram(location, 2);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()) + " - &fGARBAGE POINT"));
- page.setLineContent(1, new LineTextContent(s -> localName));
- holograms.add(hologram);
+ var holo = HologramManager.getInstance().makeUnsafe(
+ location,
+ Arrays.asList(
+ r -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()) + " - &fGARBAGE POINT",
+ r -> localName
+ )
+ );
+
+ if (null != holo) {
+ holograms.add(holo);
+ }
}
if (drop != null) {
GlowingBox glowingBox = new GlowingBox(drop.clone().add(0.5, 0, 0.5), 2, GlowColor.GREEN);
glowingBoxes.add(glowingBox);
glowingBox.startGlowing(setupSession.getPlayer());
- Hologram hologram = new Hologram(drop, 2);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()) + " - &fDROP POINT"));
- page.setLineContent(1, new LineTextContent(s -> localName));
- holograms.add(hologram);
+ var holo = HologramManager.getInstance().makeUnsafe(
+ location,
+ Arrays.asList(
+ r -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()) + " - &fDROP POINT",
+ r -> localName
+ )
+ );
+ if (null != holo) {
+
+ }
+ holograms.add(holo);
}
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelEnginesTask.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelEnginesTask.java
index 9d5a182e..e0c666be 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelEnginesTask.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelEnginesTask.java
@@ -41,10 +41,10 @@ public FuelEnginesTask(String localName, LinkedList availableStages,
public void onPlayerJoin(Arena arena, Player player) {
for (FuelStage fuelStage : availableStages) {
if (fuelStage.getEngineHologram() != null) {
- fuelStage.getEngineHologram().hide(player);
+ fuelStage.getEngineHologram().hideFromPlayer(player);
}
if (fuelStage.getStorageHologram() != null) {
- fuelStage.getStorageHologram().hide(player);
+ fuelStage.getStorageHologram().hideFromPlayer(player);
}
}
}
@@ -154,14 +154,14 @@ private void enableIndicator(Player player) {
stage.getEngineGlowing().startGlowing(player);
}
if (stage.getEngineHologram() != null) {
- stage.getEngineHologram().show(player);
+ stage.getEngineHologram().showToPlayer(player);
}
} else {
if (stage.getStorageGlowing() != null) {
stage.getStorageGlowing().startGlowing(player);
}
if (stage.getStorageHologram() != null) {
- stage.getStorageHologram().show(player);
+ stage.getStorageHologram().showToPlayer(player);
}
}
}
@@ -177,14 +177,14 @@ private void disableIndicator(Player player) {
stage.getEngineGlowing().stopGlowing(player);
}
if (stage.getEngineHologram() != null) {
- stage.getEngineHologram().hide(player);
+ stage.getEngineHologram().hideFromPlayer(player);
}
} else {
if (stage.getStorageGlowing() != null) {
stage.getStorageGlowing().stopGlowing(player);
}
if (stage.getStorageHologram() != null) {
- stage.getStorageHologram().hide(player);
+ stage.getStorageHologram().hideFromPlayer(player);
}
}
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelEnginesTaskProvider.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelEnginesTaskProvider.java
index b5cf1881..3895947a 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelEnginesTaskProvider.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelEnginesTaskProvider.java
@@ -11,7 +11,6 @@
import com.andrei1058.stevesus.api.setup.util.SaveTaskItem;
import com.andrei1058.stevesus.api.setup.util.SelectTargetBlocks;
import com.andrei1058.stevesus.arena.ArenaManager;
-import com.andrei1058.stevesus.arena.gametask.emptygarbage.OrderPriority;
import com.andrei1058.stevesus.common.gui.ItemUtil;
import com.andrei1058.stevesus.config.properties.OrphanLocationProperty;
import com.google.gson.JsonArray;
@@ -27,7 +26,6 @@
import java.util.Arrays;
import java.util.LinkedList;
-import java.util.function.Function;
public class FuelEnginesTaskProvider extends TaskProvider {
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelStage.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelStage.java
index fd2e8faa..94511bb9 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelStage.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/fuelengines/FuelStage.java
@@ -1,12 +1,11 @@
package com.andrei1058.stevesus.arena.gametask.fuelengines;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.task.GameTask;
import com.andrei1058.stevesus.api.glow.GlowColor;
import com.andrei1058.stevesus.api.glow.GlowingBox;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Locale;
import com.andrei1058.stevesus.api.locale.Message;
import com.andrei1058.stevesus.hook.glowing.GlowingManager;
@@ -16,6 +15,7 @@
import org.bukkit.entity.Player;
import org.jetbrains.annotations.Nullable;
+import java.util.List;
import java.util.UUID;
import java.util.WeakHashMap;
@@ -23,8 +23,8 @@ public class FuelStage {
private GlowingBox storageGlowing;
private GlowingBox engineGlowing;
- private Hologram storageHologram;
- private Hologram engineHologram;
+ private @Nullable HologramI storageHologram;
+ private @Nullable HologramI engineHologram;
private final WeakHashMap nextAllowed = new WeakHashMap<>();
public FuelStage(@Nullable Location storage, @Nullable Location reactor) {
@@ -46,26 +46,32 @@ public GlowingBox getEngineGlowing() {
return engineGlowing;
}
- public Hologram getStorageHologram() {
+ public @Nullable HologramI getStorageHologram() {
return storageHologram;
}
- public Hologram getEngineHologram() {
+ public @Nullable HologramI getEngineHologram() {
return engineHologram;
}
public void initHolograms(GameTask task) {
if (getStorageGlowing() != null) {
- storageHologram = new Hologram(getStorageGlowing().getMagmaCube().getLocation().add(0, 0.5, 0), 1);
- HologramPage page1 = storageHologram.getPage(0);
- assert page1 != null;
- page1.setLineContent(0, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, Message.GAME_TASK_PATH_.toString() + task.getHandler().getIdentifier() + "-" + task.getLocalName() + "holo1")));
+ storageHologram = HologramManager.getInstance().makeUnsafe(
+ getStorageGlowing().getMagmaCube().getLocation().add(0, 0.5, 0),
+ List.of(r -> LanguageManager.getINSTANCE().getMsg(r,
+ Message.GAME_TASK_PATH_ + task.getHandler().getIdentifier() +
+ "-" + task.getLocalName() + "holo1")
+ )
+ );
}
if (getEngineGlowing() != null) {
- engineHologram = new Hologram(getEngineGlowing().getMagmaCube().getLocation().add(0, 0.5, 0), 1);
- HologramPage page2 = engineHologram.getPage(0);
- assert page2 != null;
- page2.setLineContent(0, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, Message.GAME_TASK_PATH_.toString() + task.getHandler().getIdentifier() + "-" + task.getLocalName() + "holo2")));
+ engineHologram = HologramManager.getInstance().makeUnsafe(
+ getEngineGlowing().getMagmaCube().getLocation().add(0, 0.5, 0),
+ List.of(r -> LanguageManager.getINSTANCE().getMsg(r,
+ Message.GAME_TASK_PATH_ + task.getHandler().getIdentifier() +
+ "-" + task.getLocalName() + "holo2")
+ )
+ );
}
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/manifolds/UnlockManifoldsProvider.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/manifolds/UnlockManifoldsProvider.java
index ec966d07..22c9777c 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/manifolds/UnlockManifoldsProvider.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/manifolds/UnlockManifoldsProvider.java
@@ -1,13 +1,12 @@
package com.andrei1058.stevesus.arena.gametask.manifolds;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.task.GameTask;
import com.andrei1058.stevesus.api.arena.task.TaskProvider;
import com.andrei1058.stevesus.api.arena.task.TaskType;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.server.GameSound;
import com.andrei1058.stevesus.api.server.multiarena.InventoryBackup;
import com.andrei1058.stevesus.api.setup.SetupListener;
@@ -32,6 +31,7 @@
import org.jetbrains.annotations.Nullable;
import java.util.Arrays;
+import java.util.List;
public class UnlockManifoldsProvider extends TaskProvider {
@@ -98,7 +98,7 @@ public void onSetupRequest(Player player, SetupSession setupSession, String loca
player.getInventory().setHeldItemSlot(5);
final Shulker[] shulkerEntity = {null};
- final Hologram[] hologram = {null};
+ final HologramI[] hologram = {null};
setupSession.addSetupListener("unlockManifolds_" + localName, new SetupListener() {
@Override
@@ -155,12 +155,16 @@ public void onBlockPlace(SetupSession setupSession, BlockPlaceEvent event) {
shulkerEntity[0].setSilent(true);
shulkerEntity[0].setMetadata(localName, new FixedMetadataValue(SteveSus.getInstance(), localName));
player.sendMessage("Task location set!");
- hologram[0] = new Hologram(event.getBlockPlaced().getLocation(), 1);
- HologramPage page = hologram[0].getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()) + "(" + localName + ")"));
- hologram[0].refreshLines();
- event.setCancelled(true);
+
+ var holoManager = HologramManager.getInstance().getProvider();
+ if (null != holoManager) {
+ hologram[0] = holoManager.spawnHologram(event.getBlockPlaced().getLocation());
+ hologram[0].setPageContent(List.of(
+ receiver -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()) + "(" + localName + ")")
+ );
+ hologram[0].refreshForAll();
+ event.setCancelled(true);
+ }
}
}
@@ -189,11 +193,14 @@ public void onSetupLoad(SetupSession setupSession, String localName, JsonObject
if (location == null) return;
location.setWorld(Bukkit.getWorld(setupSession.getWorldName()));
- Hologram hologram = new Hologram(location, 1);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()) + "(" + localName + ")"));
- hologram.refreshLines();
+ var holoAdapter = HologramManager.getInstance().getProvider();
+
+ if (null != holoAdapter) {
+ var holo = holoAdapter.spawnHologram(location);
+ holo.setPageContent(List.of(
+ receiver -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()) + "(" + localName + ")")
+ );
+ }
}
@Override
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/manifolds/UnlockManifoldsTask.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/manifolds/UnlockManifoldsTask.java
index 9eb4ddd5..c0e5dc97 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/manifolds/UnlockManifoldsTask.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/manifolds/UnlockManifoldsTask.java
@@ -1,8 +1,5 @@
package com.andrei1058.stevesus.arena.gametask.manifolds;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.GameListener;
@@ -11,6 +8,8 @@
import com.andrei1058.stevesus.api.event.PlayerTaskDoneEvent;
import com.andrei1058.stevesus.api.glow.GlowColor;
import com.andrei1058.stevesus.api.glow.GlowingBox;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Locale;
import com.andrei1058.stevesus.api.locale.Message;
import com.andrei1058.stevesus.common.api.arena.GameState;
@@ -21,7 +20,10 @@
import org.bukkit.block.Block;
import org.bukkit.entity.*;
import org.bukkit.event.player.PlayerInteractEvent;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.Set;
import java.util.UUID;
@@ -32,7 +34,7 @@ public class UnlockManifoldsTask extends GameTask {
private final HashMap assignedPlayers = new HashMap<>();
private final Arena arena;
private final Block shulkerBlock;
- private final Hologram hologram;
+ private @Nullable HologramI hologram = null;
private final GlowingBox glowingBox;
public UnlockManifoldsTask(String localName, Arena arena, Location location) {
@@ -44,13 +46,17 @@ public UnlockManifoldsTask(String localName, Arena arena, Location location) {
shulkerBlock.setType(Material.BLACK_SHULKER_BOX);
glowingBox = new GlowingBox(location, 2, GlowColor.YELLOW);
- hologram = new Hologram(location.clone().add(0, 2, 0), 2);
- hologram.allowCollisions(false);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, Message.GAME_TASK_NAME_PATH_.toString() + getHandler().getIdentifier())));
- page.setLineContent(1, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, Message.GAME_TASK_DESCRIPTION_PATH_.toString() + getHandler().getIdentifier())));
- hologram.hide();
+ var holoProvider = HologramManager.getInstance().getProvider();
+
+ if (null != holoProvider) {
+ hologram = holoProvider.spawnHologram(location.clone().add(0, 2, 0));
+ hologram.setPageContent(Arrays.asList(
+ player -> LanguageManager.getINSTANCE().getMsg(player, Message.GAME_TASK_NAME_PATH_ + getHandler().getIdentifier()),
+ player -> LanguageManager.getINSTANCE().getMsg(player, Message.GAME_TASK_DESCRIPTION_PATH_ + getHandler().getIdentifier())
+ ));
+ hologram.hideToAll();
+ }
+
arena.registerGameListener(new GameListener() {
@Override
@@ -80,14 +86,16 @@ public void onPlayerInteract(Arena arena, Player player, PlayerInteractEvent eve
@Override
public void onGameStateChange(Arena arena, GameState oldState, GameState newState) {
if (newState == GameState.IN_GAME) {
-
+ if (null == hologram) {
+ return;
+ }
// hide hologram for those who do not have this task
for (Player player : arena.getPlayers()) {
if (!hasTask(player)) {
- hologram.hide(player);
+ hologram.hideFromPlayer(player);
}
}
- hologram.show();
+ hologram.unHide();
}
}
});
@@ -159,36 +167,46 @@ public boolean isDoingTask(Player player) {
@Override
public void enableIndicators() {
+ if (null == hologram) {
+ return;
+ }
+
for (Player player : arena.getPlayers()) {
if (hasTask(player) && (getCurrentStage(player) != getTotalStages(player))) {
getGlowingBox().startGlowing(player);
- hologram.hide(player);
+ hologram.hideFromPlayer(player);
}
}
}
@Override
public void disableIndicators() {
+ if (null == hologram) {
+ return;
+ }
+
for (Player player : arena.getPlayers()) {
if (hasTask(player)) {
getGlowingBox().stopGlowing(player);
- hologram.show(player);
+ hologram.showToPlayer(player);
}
}
}
- public void markDone(Player player) {
+ public void markDone(@NotNull Player player) {
player.closeInventory();
assignedPlayers.replace(player.getUniqueId(), true);
arena.refreshTaskMeter();
arena.getGameEndConditions().tickGameEndConditions(arena);
getGlowingBox().stopGlowing(player);
- hologram.hide(player);
+ if (null != hologram) {
+ hologram.hideFromPlayer(player);
+ }
PlayerTaskDoneEvent taskDoneEvent = new PlayerTaskDoneEvent(arena, this, player);
Bukkit.getPluginManager().callEvent(taskDoneEvent);
}
- private void tryOpenGUI(Player player, Arena arena) {
+ private void tryOpenGUI(Player player, @NotNull Arena arena) {
if (!arena.isTasksAllowedATM()) return;
if (hasTask(player)) {
if (arena.getCamHandler() != null && arena.getCamHandler().isOnCam(player, arena)) return;
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/primeshields/PrimeShieldsTaskProvider.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/primeshields/PrimeShieldsTaskProvider.java
index 40deb9d1..fb6bf326 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/primeshields/PrimeShieldsTaskProvider.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/primeshields/PrimeShieldsTaskProvider.java
@@ -1,8 +1,5 @@
package com.andrei1058.stevesus.arena.gametask.primeshields;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.task.GameTask;
@@ -10,13 +7,14 @@
import com.andrei1058.stevesus.api.arena.task.TaskType;
import com.andrei1058.stevesus.api.glow.GlowColor;
import com.andrei1058.stevesus.api.glow.GlowingBox;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.server.multiarena.InventoryBackup;
import com.andrei1058.stevesus.api.setup.SetupListener;
import com.andrei1058.stevesus.api.setup.SetupSession;
import com.andrei1058.stevesus.api.setup.util.SaveTaskItem;
import com.andrei1058.stevesus.api.setup.util.SelectTargetBlock;
import com.andrei1058.stevesus.arena.ArenaManager;
-import com.andrei1058.stevesus.arena.gametask.startreactor.StartReactorTask;
import com.andrei1058.stevesus.config.properties.OrphanLocationProperty;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
@@ -27,7 +25,7 @@
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.Nullable;
-import java.util.function.Function;
+import java.util.Arrays;
public class PrimeShieldsTaskProvider extends TaskProvider {
@@ -130,14 +128,23 @@ public void onSetupLoad(SetupSession setupSession, String localName, JsonObject
GlowingBox glowingBox = new GlowingBox(location.clone().add(0.5, 0, 0.5), 2, GlowColor.GREEN);
glowingBox.startGlowing(setupSession.getPlayer());
- Hologram hologram = new Hologram(location, 2);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName())));
- page.setLineContent(1, new LineTextContent(s -> localName));
+ var holoManager = HologramManager.getInstance().getProvider();
+ HologramI hologram = null;
+ if (null != holoManager) {
+ hologram = holoManager.spawnHologram(location);
+ hologram.setPageContent(
+ Arrays.asList(
+ player -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()),
+ player -> localName
+ )
+ );
+ }
+
// cache objects so they can be removed if player decides to remove this configuration
- setupSession.cacheValue(getIdentifier() + "-" + localName + "-holo", hologram);
+ if (null != hologram) {
+ setupSession.cacheValue(getIdentifier() + "-" + localName + "-holo", hologram);
+ }
setupSession.cacheValue(getIdentifier() + "-" + localName + "-glowing", glowingBox);
}).execute();
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/scan/SubmitScanProvider.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/scan/SubmitScanProvider.java
index 4d54f8e3..e2b4c414 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/scan/SubmitScanProvider.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/scan/SubmitScanProvider.java
@@ -1,13 +1,11 @@
package com.andrei1058.stevesus.arena.gametask.scan;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.task.TaskProvider;
-import com.andrei1058.stevesus.api.arena.task.TaskTriggerType;
import com.andrei1058.stevesus.api.arena.task.TaskType;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.server.GameSound;
import com.andrei1058.stevesus.api.setup.SetupListener;
import com.andrei1058.stevesus.api.setup.SetupSession;
@@ -28,12 +26,10 @@
import org.bukkit.inventory.ItemStack;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.Nullable;
-import org.json.simple.JSONObject;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashMap;
import java.util.List;
import java.util.function.Function;
@@ -98,9 +94,9 @@ public void onSetupRequest(Player player, SetupSession setupSession, String loca
double minRange = 1;
Arrays.asList(" ", " ",
- ChatColor.AQUA + "1." + ChatColor.RESET + " Use the items in your inventory to adjust task settings.",
- ChatColor.AQUA + "2." + ChatColor.RESET + " You can increase and decrease this task's usage radius (Capsule radius). When set to " + minRange + " players will need to stand on the exact scan location block.",
- ChatColor.AQUA + "3." + ChatColor.RESET + " You can increase and decrease how long it takes to scan.")
+ ChatColor.AQUA + "1." + ChatColor.RESET + " Use the items in your inventory to adjust task settings.",
+ ChatColor.AQUA + "2." + ChatColor.RESET + " You can increase and decrease this task's usage radius (Capsule radius). When set to " + minRange + " players will need to stand on the exact scan location block.",
+ ChatColor.AQUA + "3." + ChatColor.RESET + " You can increase and decrease how long it takes to scan.")
.forEach(player::sendMessage);
ItemStack saveAndClose = ItemUtil.createItem("BOOK", (byte) 0, 1, true, Arrays.asList("customTaskItem", "saveAndClose"), ChatColor.RED + "" + ChatColor.BOLD + "Save and close: " + ChatColor.RESET + getDefaultDisplayName(), null);
@@ -128,7 +124,7 @@ public void onSetupRequest(Player player, SetupSession setupSession, String loca
final int[] currentSeconds = {minSeconds};
Location[] scanCapsuleLocation = {null};
- Hologram[] scanCapsuleHologram = {null};
+ HologramI[] scanCapsuleHologram = {null};
// save and close task setup.
final boolean[] preventCalledTwice = {false};
@@ -167,16 +163,19 @@ public void onSetupRequest(Player player, SetupSession setupSession, String loca
Function setScanLoc = location -> {
if (scanCapsuleHologram[0] != null) {
- scanCapsuleHologram[0].hide();
+ scanCapsuleHologram[0].hideToAll();
+ }
+ var holoManager = HologramManager.getInstance().getProvider();
+ if (null != holoManager) {
+ scanCapsuleHologram[0] = holoManager.spawnHologram(location.clone().add(0, 2, 0));
+ scanCapsuleHologram[0].setPageContent(Arrays.asList(
+ receiver -> "&b&lSubmit Scan",
+ receiver -> "&fSet here! (" + localName + ")"
+ ));
+ scanCapsuleLocation[0] = location;
+ scanCapsuleHologram[0].hideFromPlayer(player);
+ scanCapsuleHologram[0].showToPlayer(player);
}
- scanCapsuleHologram[0] = new Hologram(location, 2);
- HologramPage page = scanCapsuleHologram[0].getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> "&b&lSubmit Scan"));
- page.setLineContent(1, new LineTextContent(s -> "&fSet here! (" + localName + ")"));
- scanCapsuleLocation[0] = location;
- scanCapsuleHologram[0].hide(player);
- scanCapsuleHologram[0].show(player);
player.sendTitle(" ", ChatColor.AQUA + "Scan location set!", 0, 50, 0);
GameSound.JOIN_SOUND_CURRENT.playToPlayer(player);
particleLocations.clear();
@@ -269,14 +268,20 @@ public void onSetupLoad(SetupSession setupSession, String localName, JsonObject
}), 0L, 10).getTaskId();
setupSession.cacheValue("submit_scan_task_id_" + localName, particlesTask);
- Hologram hologram = new Hologram(location.add(0, 1.7, 0), 2);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> "&b&lSubmit Scan"));
- page.setLineContent(1, new LineTextContent(s -> "&fSet here! (" + localName + ")"));
- hologram.hide(setupSession.getPlayer());
- hologram.show(setupSession.getPlayer());
- setupSession.cacheValue("submit_scan_" + localName, hologram);
+ HologramI hologram = null;
+ var holoManager = HologramManager.getInstance().getProvider();
+ if (null != holoManager) {
+ hologram = holoManager.spawnHologram(location.add(0, 1.7, 0));
+ hologram.setPageContent(Arrays.asList(
+ receiver -> "&b&lSubmit Scan",
+ receiver -> "&fSet here! (" + localName + ")"
+ ));
+ hologram.hideFromPlayer(setupSession.getPlayer());
+ hologram.showToPlayer(setupSession.getPlayer());
+ }
+ if (null != hologram) {
+ setupSession.cacheValue("submit_scan_" + localName, hologram);
+ }
}
@Override
@@ -289,9 +294,9 @@ public void onSetupClose(SetupSession setupSession, String localName, JsonObject
@Override
public void onRemove(SetupSession setupSession, String localName, JsonObject configData) {
- Hologram hologram = (Hologram) setupSession.getCachedValue("submit_scan_" + localName);
+ HologramI hologram = (HologramI) setupSession.getCachedValue("submit_scan_" + localName);
if (hologram != null) {
- hologram.hide();
+ hologram.remove();
setupSession.removeCacheValue("submit_scan_" + localName);
}
Object cached = setupSession.getCachedValue("submit_scan_task_id_" + localName);
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/scan/SubmitScanTask.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/scan/SubmitScanTask.java
index 8e43f54d..51303391 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/scan/SubmitScanTask.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/scan/SubmitScanTask.java
@@ -1,8 +1,5 @@
package com.andrei1058.stevesus.arena.gametask.scan;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.GameListener;
@@ -10,12 +7,16 @@
import com.andrei1058.stevesus.api.arena.task.TaskProvider;
import com.andrei1058.stevesus.api.arena.team.Team;
import com.andrei1058.stevesus.api.event.PlayerTaskDoneEvent;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Message;
import com.andrei1058.stevesus.common.api.arena.GameState;
import com.andrei1058.stevesus.language.LanguageManager;
import org.bukkit.*;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.*;
@@ -23,7 +24,7 @@ public class SubmitScanTask extends GameTask {
private final double capsuleRadius;
private int scanDuration;
- private final Hologram taskHologram;
+ private @Nullable HologramI taskHologram = null;
private final List scanParticles;
private final Location scanCapsuleLocation;
// one scan at a time.
@@ -33,14 +34,18 @@ public class SubmitScanTask extends GameTask {
public SubmitScanTask(double radius, int scanDuration, Location capsuleLocation, Arena arena, String localName) {
super(localName);
this.scanCapsuleLocation = capsuleLocation.clone();
- this.scanCapsuleLocation.add(0, 1, 0);
+ this.scanCapsuleLocation.add(0, 0.3, 0);
this.capsuleRadius = radius;
this.scanDuration = scanDuration;
- this.taskHologram = new Hologram(capsuleLocation.clone().add(0, 1.8, 0), 2);
- HologramPage page = taskHologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, Message.GAME_TASK_NAME_PATH_.toString() + getHandler().getIdentifier())));
- page.setLineContent(1, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, Message.GAME_TASK_DESCRIPTION_PATH_.toString() + getHandler().getIdentifier())));
+
+ var holoManager = HologramManager.getInstance().getProvider();
+ if (null != holoManager) {
+ this.taskHologram = holoManager.spawnHologram(capsuleLocation.clone().add(0, 1.8, 0));
+ this.taskHologram.setPageContent(Arrays.asList(
+ receiver -> LanguageManager.getINSTANCE().getMsg(receiver, Message.GAME_TASK_NAME_PATH_ + getHandler().getIdentifier()),
+ receiver -> LanguageManager.getINSTANCE().getMsg(receiver, Message.GAME_TASK_DESCRIPTION_PATH_ + getHandler().getIdentifier())
+ ));
+ }
scanParticles = new ArrayList<>(SubmitScanProvider.getInstance().getCircle(capsuleLocation.add(0, 0.3, 0), radius, 15));
@@ -83,7 +88,7 @@ public int getTotalStages(UUID player) {
}
@Override
- public void assignToPlayer(Player player, Arena arena) {
+ public void assignToPlayer(@NotNull Player player, Arena arena) {
assignedPlayers.remove(player.getUniqueId());
assignedPlayers.put(player.getUniqueId(), 0);
}
@@ -94,7 +99,7 @@ public Set getAssignedPlayers() {
}
@Override
- public boolean hasTask(Player player) {
+ public boolean hasTask(@NotNull Player player) {
return assignedPlayers.containsKey(player.getUniqueId());
}
@@ -105,12 +110,19 @@ public boolean isDoingTask(Player player) {
@Override
public void enableIndicators() {
- taskHologram.show();
+ if (null == taskHologram) {
+ return;
+ }
+ // fixme show to all?
+ taskHologram.unHide();
}
@Override
public void disableIndicators() {
- taskHologram.hide();
+ if (null == taskHologram) {
+ return;
+ }
+ taskHologram.hideToAll();
}
@@ -177,7 +189,9 @@ private void cancelScan(boolean done, Player player, Arena arena) {
Bukkit.getScheduler().cancelTask(currentScanTask);
}
if (done) {
- taskHologram.hide(player);
+ if (null != taskHologram) {
+ taskHologram.hideFromPlayer(player);
+ }
assignedPlayers.replace(currentScan, 1);
player.sendTitle(" ", LanguageManager.getINSTANCE().getMsg(player, SubmitScanProvider.MSG_SCANNING_DONE), 0, 10, 0);
player.playSound(player.getLocation(), Sound.ENTITY_CAT_PURREOW, 1, 1);
@@ -216,9 +230,12 @@ public void onPlayerToggleSneakEvent(Arena arena, Player player, boolean isSneak
@Override
public void onGameStateChange(Arena arena, GameState oldState, GameState newState) {
if (newState == GameState.IN_GAME) {
+ if (null == taskHologram){
+ return;
+ }
for (Player player : arena.getPlayers()) {
if (hasTask(player)) {
- taskHologram.show(player);
+ taskHologram.showToPlayer(player);
}
}
}
@@ -226,7 +243,10 @@ public void onGameStateChange(Arena arena, GameState oldState, GameState newStat
@Override
public void onPlayerJoin(Arena arena, Player player) {
- taskHologram.hide(player);
+ if (null == taskHologram) {
+ return;
+ }
+ taskHologram.hideFromPlayer(player);
}
}
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/startreactor/StartReactorTaskProvider.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/startreactor/StartReactorTaskProvider.java
index fc976624..e0ec5514 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/startreactor/StartReactorTaskProvider.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/startreactor/StartReactorTaskProvider.java
@@ -1,8 +1,5 @@
package com.andrei1058.stevesus.arena.gametask.startreactor;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.task.GameTask;
@@ -10,6 +7,8 @@
import com.andrei1058.stevesus.api.arena.task.TaskType;
import com.andrei1058.stevesus.api.glow.GlowColor;
import com.andrei1058.stevesus.api.glow.GlowingBox;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.server.multiarena.InventoryBackup;
import com.andrei1058.stevesus.api.setup.SetupListener;
import com.andrei1058.stevesus.api.setup.SetupSession;
@@ -26,7 +25,7 @@
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.Nullable;
-import java.util.function.Function;
+import java.util.Arrays;
public class StartReactorTaskProvider extends TaskProvider {
@@ -129,14 +128,20 @@ public void onSetupLoad(SetupSession setupSession, String localName, JsonObject
GlowingBox glowingBox = new GlowingBox(location.clone().add(0.5, 0, 0.5), 2, GlowColor.GREEN);
glowingBox.startGlowing(setupSession.getPlayer());
- Hologram hologram = new Hologram(location, 2);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName())));
- page.setLineContent(1, new LineTextContent(s -> localName));
+ var holoManager = HologramManager.getInstance().getProvider();
+ HologramI holo = null;
+ if (null != holoManager) {
+ holo = holoManager.spawnHologram(location);
+ holo.setPageContent(Arrays.asList(
+ r -> ChatColor.translateAlternateColorCodes('&', getDefaultDisplayName()),
+ r -> localName
+ ));
+ }
// cache objects so they can be removed if player decides to remove this configuration
- setupSession.cacheValue(getIdentifier() + "-" + localName + "-holo", hologram);
+ if (null != holo) {
+ setupSession.cacheValue(getIdentifier() + "-" + localName + "-holo", holo);
+ }
setupSession.cacheValue(getIdentifier() + "-" + localName + "-glowing", glowingBox);
}).execute();
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/upload/UploadTask.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/upload/UploadTask.java
index 75ebb7b9..184c8bb2 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/upload/UploadTask.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/upload/UploadTask.java
@@ -20,6 +20,7 @@
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
+import org.jetbrains.annotations.NotNull;
import java.util.*;
import java.util.stream.Collectors;
@@ -52,7 +53,9 @@ public void markPanelFinished(Player player, Arena arena) {
// already finished;
return;
}
- panel.getHologram().hide(player);
+ if (null != panel.getHologram()) {
+ panel.getHologram().hideFromPlayer(player);
+ }
GlowingManager.getInstance().removeGlowing(panel.getItemFrame(), player);
int taskId = currentlyDoing.remove(player.getUniqueId());
Bukkit.getScheduler().cancelTask(taskId);
@@ -70,7 +73,9 @@ public void markPanelFinished(Player player, Arena arena) {
WallPanel newPanel = nextPanel.get(0);
currentPlayerStage.remove(player.getUniqueId());
currentPlayerStage.put(player.getUniqueId(), newPanel);
- newPanel.getHologram().show(player);
+ if (null != newPanel.getHologram()) {
+ newPanel.getHologram().showToPlayer(player);
+ }
GlowingManager.setGlowingBlue(newPanel.getItemFrame(), player);
player.playSound(player.getLocation(), Sound.UI_BUTTON_CLICK, 1, 1);
GameRoom room = arena.getRoom(newPanel.getItemFrame().getLocation());
@@ -104,30 +109,27 @@ public void onPlayerInteractEntity(Arena arena, Player player, Entity entity) {
@Override
public void onGameStateChange(Arena arena, GameState oldState, GameState newState) {
if (newState == GameState.IN_GAME) {
- panels.forEach(panel -> {
- arena.getPlayers().forEach(player -> {
- if (!GlowingManager.isGlowing(panel.getItemFrame(), player)) {
- if (panel.getHologram() != null) {
- panel.getHologram().hide(player);
- }
- } else {
- if (panel.getHologram() != null) {
- panel.getHologram().show(player);
- }
+ for (Player player : arena.getPlayers()) {
+ if (!hasTask(player)) {
+ continue;
+ }
+ for (WallPanel panel : panels) {
+ if (null == panel.getHologram()) {
+ continue;
}
- });
- if (panel.getHologram() != null) {
- panel.getHologram().show();
+ panel.getHologram().showToPlayer(player);
}
- });
+ }
}
}
@Override
- public void onPlayerJoin(Arena arena, Player player) {
+ public void onPlayerJoin(@NotNull Arena arena, Player player) {
if (arena.getGameState() == GameState.IN_GAME) {
for (WallPanel panel : panels) {
- panel.getHologram().hide(player);
+ if (null != panel.getHologram()) {
+ panel.getHologram().hideFromPlayer(player);
+ }
}
} else {
// hide existing glowing
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/upload/panel/WallPanel.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/upload/panel/WallPanel.java
index 5c064ea2..bf69de0a 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/upload/panel/WallPanel.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/upload/panel/WallPanel.java
@@ -1,10 +1,9 @@
package com.andrei1058.stevesus.arena.gametask.upload.panel;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.arena.gametask.upload.UploadTaskProvider;
import com.andrei1058.stevesus.language.LanguageManager;
import com.github.johnnyjayjay.spigotmaps.MapBuilder;
@@ -14,10 +13,12 @@
import org.bukkit.Location;
import org.bukkit.entity.ItemFrame;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.Nullable;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
+import java.util.List;
public class WallPanel {
@@ -26,7 +27,7 @@ public enum PanelType {
}
private final ItemFrame itemFrame;
- private Hologram hologram;
+ private @Nullable HologramI hologram = null;
private final PanelType panelType;
public WallPanel(Arena arena, Location location, PanelType panelType) {
@@ -54,12 +55,21 @@ public WallPanel(Arena arena, Location location, PanelType panelType) {
e.printStackTrace();
}
- this.hologram = new Hologram(itemFrame.getLocation().clone().add(0, 1, 0).add((itemFrame.getLocation().getDirection().normalize())), 1);
- HologramPage page = this.hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, getPanelType() == PanelType.DOWNLOAD ? UploadTaskProvider.DOWNLOAD_PANEL_HOLO : UploadTaskProvider.UPLOAD_PANEL_HOLO)));
- hologram.hide();
- hologram.allowCollisions(false);
+ var holoManager = HologramManager.getInstance().getProvider();
+ if (null != holoManager) {
+ var holo = holoManager.spawnHologram(
+ itemFrame.getLocation().clone().add(0, 1, 0)
+ .add((itemFrame.getLocation().getDirection().normalize()))
+ );
+ holo.setPageContent(List.of(
+ r -> LanguageManager.getINSTANCE().getMsg(r,
+ getPanelType() == PanelType.DOWNLOAD ?
+ UploadTaskProvider.DOWNLOAD_PANEL_HOLO :
+ UploadTaskProvider.UPLOAD_PANEL_HOLO
+ )
+ ));
+ holo.hideToAll();
+ }
}
public PanelType getPanelType() {
@@ -70,7 +80,7 @@ public ItemFrame getItemFrame() {
return itemFrame;
}
- public Hologram getHologram() {
+ public @Nullable HologramI getHologram() {
return hologram;
}
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/wiring/FixWiringTask.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/wiring/FixWiringTask.java
index 6698e359..6a88a63c 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/wiring/FixWiringTask.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/wiring/FixWiringTask.java
@@ -20,6 +20,7 @@
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
+import org.jetbrains.annotations.NotNull;
import java.util.*;
import java.util.stream.Collectors;
@@ -255,27 +256,26 @@ public void onPlayerInteractEntity(Arena arena, Player player, Entity entity) {
@Override
public void onGameStateChange(Arena arena, GameState oldState, GameState newState) {
if (newState == GameState.IN_GAME) {
- wallPanels.forEach(panel -> {
- arena.getPlayers().forEach(player -> {
- if (!(hasTask(player) && GlowingManager.isGlowing(panel.getItemFrame(), player))) {
- if (panel.getHologram() != null) {
- panel.getHologram().hide(player);
- }
+ for (Player player : arena.getPlayers()) {
+ if (!hasTask(player)) {
+ continue;
+ }
+ for (WallPanel panel : wallPanels) {
+ if (null == panel.getHologram()) {
+ continue;
}
- });
- if (panel.getHologram() != null) {
- panel.getHologram().show();
+ panel.getHologram().showToPlayer(player);
}
- });
+ }
}
}
@Override
- public void onPlayerJoin(Arena arena, Player player) {
+ public void onPlayerJoin(@NotNull Arena arena, Player player) {
if (arena.getGameState() == GameState.IN_GAME) {
wallPanels.forEach(panel -> {
if (panel.getHologram() != null) {
- panel.getHologram().hide(player);
+ panel.getHologram().hideFromPlayer(player);
}
});
} else {
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/wiring/panel/WallPanel.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/wiring/panel/WallPanel.java
index 322c19ac..57c76b34 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/wiring/panel/WallPanel.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/gametask/wiring/panel/WallPanel.java
@@ -1,10 +1,9 @@
package com.andrei1058.stevesus.arena.gametask.wiring.panel;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Locale;
import com.andrei1058.stevesus.arena.gametask.wiring.FixWiringProvider;
import com.andrei1058.stevesus.arena.gametask.wiring.FixWiringTask;
@@ -19,10 +18,13 @@
import org.bukkit.entity.ItemFrame;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
+import java.util.List;
import java.util.UUID;
public class WallPanel {
@@ -30,11 +32,11 @@ public class WallPanel {
private final int wiresAmount;
private final FixWiringTask.PanelFlag flag;
private final ItemFrame itemFrame;
- private Hologram hologram;
+ private @Nullable HologramI hologram = null;
private int assignments = 0;
- public WallPanel(Arena arena, int x, int y, int z, int wiresAmount, FixWiringTask.PanelFlag flag) {
+ public WallPanel(@NotNull Arena arena, int x, int y, int z, int wiresAmount, FixWiringTask.PanelFlag flag) {
this.wiresAmount = wiresAmount;
this.flag = flag;
@@ -45,7 +47,6 @@ public WallPanel(Arena arena, int x, int y, int z, int wiresAmount, FixWiringTas
}
this.itemFrame.setItem(null);
-
try {
BufferedImage catImage = ImageIO.read(this.getClass().getResource("wiring_panel.png")); // read an image from a source, e.g. a file
catImage = ImageTools.resizeToMapSize(catImage); // resize the image to the minecraft map size
@@ -61,12 +62,19 @@ public WallPanel(Arena arena, int x, int y, int z, int wiresAmount, FixWiringTas
e.printStackTrace();
}
- this.hologram = new Hologram(itemFrame.getLocation().clone().add(0,1,0).add((itemFrame.getLocation().getDirection().normalize()))/*.add(itemFrame.getLocation().getDirection())*/, 1);
- HologramPage page = this.hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, FixWiringProvider.PANEL_HOLO)));
- hologram.hide();
- hologram.allowCollisions(false);
+ var holoManager = HologramManager.getInstance().getProvider();
+
+ if (null != holoManager) {
+ this.hologram = holoManager.spawnHologram(
+ itemFrame.getLocation().clone().add(0, 1, 0)
+ .add((itemFrame.getLocation().getDirection().normalize())
+ )
+ );
+ this.hologram.setPageContent(List.of(
+ r -> LanguageManager.getINSTANCE().getMsg(r, FixWiringProvider.PANEL_HOLO)
+ ));
+ this.hologram.hideToAll();
+ }
}
public ItemFrame getItemFrame() {
@@ -95,28 +103,28 @@ public void startFixingPanel(Player player, FixWiringTask fixWiring) {
}).execute();
}
- public void startGlowing(UUID player){
+ public void startGlowing(UUID player) {
Player player1 = Bukkit.getPlayer(player);
if (player1 == null) return;
GlowingManager.setGlowingGreen(getItemFrame(), player1);
if (hologram != null) {
- hologram.show(player1);
+ hologram.showToPlayer(player1);
}
}
- public void startGlowing(Player player){
+ public void startGlowing(Player player) {
GlowingManager.setGlowingGreen(getItemFrame(), player);
if (hologram != null) {
- hologram.show(player);
+ hologram.showToPlayer(player);
}
}
- public void stopGlowing(UUID player){
+ public void stopGlowing(UUID player) {
Player player1 = Bukkit.getPlayer(player);
if (player1 == null) return;
GlowingManager.getInstance().removeGlowing(getItemFrame(), player1);
if (hologram != null) {
- hologram.hide(player1);
+ hologram.showToPlayer(player1);
}
}
@@ -124,14 +132,14 @@ public void increaseAssignments() {
assignments++;
}
- public Hologram getHologram() {
+ public @Nullable HologramI getHologram() {
return hologram;
}
public void stopGlowing(Player player) {
GlowingManager.getInstance().removeGlowing(getItemFrame(), player);
if (hologram != null) {
- hologram.hide(player);
+ hologram.showToPlayer(player);
}
}
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/listener/PlayerMoveListener.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/listener/PlayerMoveListener.java
index ee95c55c..1683446e 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/listener/PlayerMoveListener.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/listener/PlayerMoveListener.java
@@ -47,12 +47,12 @@ public void onMove(PlayerMoveEvent event) {
if (corpse.isInRange(location)) {
if (corpse.getHologram().isHiddenFor(player)) {
if (playerTeam != null && playerTeam.canReportBody()) {
- corpse.getHologram().show(player);
+ corpse.getHologram().showToPlayer(player);
}
}
} else {
if (!corpse.getHologram().isHiddenFor(player)) {
- corpse.getHologram().hide(player);
+ corpse.getHologram().hideFromPlayer(player);
}
}
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/sabotage/oxygen/OxygenSabotage.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/sabotage/oxygen/OxygenSabotage.java
index a1975bea..a0488ea2 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/sabotage/oxygen/OxygenSabotage.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/arena/sabotage/oxygen/OxygenSabotage.java
@@ -1,8 +1,5 @@
package com.andrei1058.stevesus.arena.sabotage.oxygen;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.GameListener;
@@ -13,6 +10,8 @@
import com.andrei1058.stevesus.api.event.GameSabotageDeactivateEvent;
import com.andrei1058.stevesus.api.glow.GlowColor;
import com.andrei1058.stevesus.api.glow.GlowingBox;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Message;
import com.andrei1058.stevesus.common.gui.ItemUtil;
import com.andrei1058.stevesus.language.LanguageManager;
@@ -137,17 +136,20 @@ public class OxygenMonitor {
private byte nextErrorFace = -1;
private byte nextPulseFace = -1;
private boolean fixed = true;
- private final Hologram hologram;
+ private @Nullable HologramI hologram;
private final GlowingBox glowingBox;
- public OxygenMonitor(Location location) {
+ public OxygenMonitor(@NotNull Location location) {
// try to create error state hologram
- hologram = new Hologram(location.clone().add(0, 2, 0).add(location.getDirection()), 1);
- hologram.allowCollisions(false);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, OxygenSabotageProvider.TO_FIX_HOLOGRAM)));
- hologram.hide();
+ hologram = HologramManager.getInstance().makeUnsafe(
+ location.clone().add(0, 2, 0).add(location.getDirection()),
+ List.of(
+ r-> LanguageManager.getINSTANCE().getMsg(r, OxygenSabotageProvider.TO_FIX_HOLOGRAM)
+ )
+ );
+ if (null != hologram) {
+ hologram.hideToAll();
+ }
glowingBox = new GlowingBox(location.clone().add(0, 1.5, 0), 1, GlowColor.RED);
@@ -180,8 +182,11 @@ public OxygenMonitor(Location location) {
}
public void startError() {
- hologram.show();
- hologram.refreshLines();
+ if (null != hologram) {
+ // fixme show to all
+// hologram.show();
+ hologram.refreshForAll();
+ }
fixed = false;
for (Player player : getArena().getPlayers()) {
getGlowingBox().startGlowing(player);
@@ -207,7 +212,9 @@ public void onErrorFix(boolean meeting) {
if (!meeting) {
tryDeactivate();
}
- hologram.hide();
+ if (null != hologram) {
+ hologram.remove();
+ }
for (Player player : getArena().getPlayers()) {
getGlowingBox().stopGlowing(player);
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/hook/corpse/CorpseManager.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/hook/corpse/CorpseManager.java
index ad2dcab0..2e184686 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/hook/corpse/CorpseManager.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/hook/corpse/CorpseManager.java
@@ -1,12 +1,11 @@
package com.andrei1058.stevesus.hook.corpse;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.Arena;
import com.andrei1058.stevesus.api.arena.PlayerCorpse;
import com.andrei1058.stevesus.api.arena.team.Team;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.locale.Message;
import com.andrei1058.stevesus.api.arena.room.CircleRegion;
import com.andrei1058.stevesus.api.arena.room.Region;
@@ -19,6 +18,7 @@
import org.golde.bukkit.corpsereborn.nms.Corpses;
import org.jetbrains.annotations.Nullable;
+import java.util.Arrays;
import java.util.UUID;
public class CorpseManager {
@@ -40,24 +40,28 @@ public static class CorpseRebornBody implements PlayerCorpse {
private final Corpses.CorpseData data;
private final Player owner;
- private final Hologram hologram;
+ private @Nullable HologramI hologram = null;
private final Region region;
public CorpseRebornBody(Arena arena, Player player, Location location, ItemStack helmet, ItemStack chestPlate, ItemStack leggings, ItemStack boots) {
owner = player;
this.region = new CircleRegion(location, 3, false);
data = CorpseAPI.spawnCorpse(player, location, new ItemStack[]{}, helmet, chestPlate, leggings, boots);
- hologram = new Hologram(location, 2);
- HologramPage page = hologram.getPage(0);
- assert page != null;
- page.setLineContent(0, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, Message.DEAD_BODY_HOLO_LINE1)));
- page.setLineContent(1, new LineTextContent(s -> LanguageManager.getINSTANCE().getMsg(s, Message.DEAD_BODY_HOLO_LINE2)));
+
+ var holoManager = HologramManager.getInstance().getProvider();
+ if (null != holoManager) {
+ hologram = holoManager.spawnHologram(location);
+ hologram.setPageContent(Arrays.asList(
+ r -> LanguageManager.getINSTANCE().getMsg(r, Message.DEAD_BODY_HOLO_LINE1),
+ r -> LanguageManager.getINSTANCE().getMsg(r, Message.DEAD_BODY_HOLO_LINE2)
+ ));
+ }
arena.getPlayers().forEach(inGame -> {
Team playerTeam = arena.getPlayerTeam(inGame);
if (isInRange(inGame.getLocation()) && playerTeam.canReportBody()) {
- hologram.show(inGame);
+ hologram.showToPlayer(inGame);
} else {
- hologram.hide(inGame);
+ hologram.hideFromPlayer(inGame);
}
});
}
@@ -69,8 +73,9 @@ public Corpses.CorpseData getData() {
@Override
public void destroy() {
CorpseAPI.removeCorpse(data);
- hologram.hide();
- //todo destroy hologram
+ if (null != hologram) {
+ hologram.remove();
+ }
}
@Override
@@ -94,7 +99,7 @@ public UUID getOwner() {
}
@Override
- public @Nullable Hologram getHologram() {
+ public @Nullable HologramI getHologram() {
return hologram;
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/server/ServerManager.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/server/ServerManager.java
index bcfb996d..a5e591ec 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/server/ServerManager.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/server/ServerManager.java
@@ -2,10 +2,10 @@
import ch.jalu.configme.SettingsManager;
import ch.jalu.configme.SettingsManagerBuilder;
-import com.andrei1058.hologramapi.HologramAPI;
import com.andrei1058.spigot.versionsupport.ParticleSupport;
import com.andrei1058.spigot.versionsupport.PlayerNPCSupport;
import com.andrei1058.stevesus.SteveSus;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.server.DisconnectHandler;
import com.andrei1058.stevesus.api.server.ServerType;
import com.andrei1058.stevesus.arena.listener.*;
@@ -46,7 +46,6 @@ public class ServerManager {
private DisconnectHandler disconnectHandler;
private boolean debuggingLogs = true;
private final String serverName;
- private HologramAPI hologramAPI;
private PlayerNPCSupport playerNPCSupport;
private static ParticleSupport particleSupport;
@@ -64,6 +63,9 @@ public static void onLoad() {
if (INSTANCE == null) {
INSTANCE = new ServerManager();
}
+
+ // register hologram api
+ HologramManager.getInstance().onLoad(SteveSus.getInstance());
}
@SuppressWarnings("InstantiationOfUtilityClass")
@@ -72,11 +74,7 @@ public static void onEnable() {
INSTANCE.config.reload();
// register hologram api
- try {
- INSTANCE.hologramAPI = new HologramAPI(SteveSus.getInstance());
- } catch (InstantiationException e) {
- e.printStackTrace();
- }
+ HologramManager.getInstance().onEnable(SteveSus.getInstance());
particleSupport = ParticleSupport.SupportBuilder.load();
@@ -156,6 +154,8 @@ public static void onDisable() {
RemoteLobby.getSockets().values().forEach(RemoteLobby::close);
SteveSus.debug("Took " + (System.currentTimeMillis() - startTime) + "ms to disable " + ServerManager.class.getSimpleName() + ".");
}
+ // clear hologram api
+ HologramManager.getInstance().onDisable(SteveSus.getInstance());
}
public SettingsManager getConfig() {
@@ -191,10 +191,6 @@ public String getServerName() {
return serverName;
}
- public HologramAPI getHologramAPI() {
- return hologramAPI;
- }
-
public PlayerNPCSupport getPlayerNPCSupport() {
return playerNPCSupport;
}
diff --git a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/setup/SetupActivity.java b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/setup/SetupActivity.java
index 93cff0e7..00330c90 100644
--- a/stevesus-plugin/src/main/java/com/andrei1058/stevesus/setup/SetupActivity.java
+++ b/stevesus-plugin/src/main/java/com/andrei1058/stevesus/setup/SetupActivity.java
@@ -1,11 +1,10 @@
package com.andrei1058.stevesus.setup;
import ch.jalu.configme.SettingsManager;
-import com.andrei1058.hologramapi.Hologram;
-import com.andrei1058.hologramapi.HologramPage;
-import com.andrei1058.hologramapi.content.LineTextContent;
import com.andrei1058.stevesus.SteveSus;
import com.andrei1058.stevesus.api.arena.ArenaTime;
+import com.andrei1058.stevesus.api.hook.hologram.HologramI;
+import com.andrei1058.stevesus.api.hook.hologram.HologramManager;
import com.andrei1058.stevesus.api.server.ServerType;
import com.andrei1058.stevesus.api.setup.SetupListener;
import com.andrei1058.stevesus.api.setup.SetupSession;
@@ -23,6 +22,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
+import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashMap;
@@ -32,7 +32,7 @@ public class SetupActivity implements SetupSession {
private final Player player;
private final String worldName;
private SettingsManager config;
- private Hologram meetingButtonHologram;
+ private @Nullable HologramI meetingButtonHologram;
private BukkitTask setupTask;
private boolean allowCommands = true;
private final LinkedHashMap cachedValues = new LinkedHashMap<>();
@@ -105,7 +105,6 @@ public void onStart(World world) {
public void onStop() {
setupTask.cancel();
if (meetingButtonHologram != null) {
- meetingButtonHologram.hide();
meetingButtonHologram.remove();
}
if (player.isOnline()) {
@@ -166,27 +165,28 @@ public Collection getSetupListeners() {
public void reloadButtonHologram() {
config.reload();
if (!config.getProperty(ArenaConfig.MEETING_BUTTON_LOC).isPresent()) return;
- HologramPage page;
if (meetingButtonHologram != null) {
- meetingButtonHologram.hide();
meetingButtonHologram.remove();
}
// the first page is created automatically
Location location = config.getProperty(ArenaConfig.MEETING_BUTTON_LOC).get();
location.setWorld(player.getWorld());
- meetingButtonHologram = new Hologram(location.clone().add(0, 1.3, 0), 2);
- page = meetingButtonHologram.getPage(0);
- // setting first line content
- assert page != null;
- page.setLineContent(0, new LineTextContent((p) -> "&4&lEmergency Meeting Button"));
- page.setLineContent(1, new LineTextContent((p) -> "&fwill be spawned here"));
+ meetingButtonHologram = HologramManager.getInstance().makeUnsafe(
+ location.clone().add(0, 1.3, 0),
+ Arrays.asList(
+ r -> "&4&lEmergency Meeting Button",
+ r -> "&fwill be spawned here"
+ )
+ );
SteveSus.newChain().delay(10).sync(()-> {
- meetingButtonHologram.hide(player);
- meetingButtonHologram.show(player);
+ if (null != meetingButtonHologram) {
+ meetingButtonHologram.hideFromPlayer(player);
+ meetingButtonHologram.showToPlayer(player);
+ }
}).execute();
}
- public void setTime(ArenaTime time) {
+ public void setTime(@NotNull ArenaTime time) {
this.time = time;
Bukkit.getWorld(getWorldName()).setTime(time.getStartTick());
}
diff --git a/stevesus-plugin/src/main/resources/plugin.yml b/stevesus-plugin/src/main/resources/plugin.yml
index f831cdd5..4d34c464 100644
--- a/stevesus-plugin/src/main/resources/plugin.yml
+++ b/stevesus-plugin/src/main/resources/plugin.yml
@@ -11,4 +11,5 @@ softdepend:
- CorpseReborn
- GlowAPI
- PacketListenerAPI
+ - packetevents
main: com.andrei1058.stevesus.SteveSus
\ No newline at end of file