24package com.dreamfirestudios.dreamcore.DreamEntityMask;
26import com.dreamfirestudios.dreamcore.DreamCore;
27import com.dreamfirestudios.dreamcore.DreamVanish.DreamVanish;
29import org.bukkit.entity.Entity;
30import org.bukkit.entity.EntityType;
31import org.bukkit.entity.LivingEntity;
32import org.bukkit.entity.Player;
34import java.util.ArrayList;
51 @Getter
private Player player;
54 private boolean deleteMaskOnNull;
57 @Getter
private double minDistance;
60 @Getter
private double maxDistance;
66 private final List<EntityType> entityTypeExceptions =
new ArrayList<>();
69 private final List<UUID> uuidExceptions =
new ArrayList<>();
72 private List<Entity> lastFrameEntities =
new ArrayList<>();
75 @Getter
private boolean actionBarPaused =
true;
86 if (!entityTypeExceptions.contains(entityType)) {
87 entityTypeExceptions.add(entityType);
98 if (!uuidExceptions.contains(entityUUID)) {
99 uuidExceptions.add(entityUUID);
116 if (player ==
null || !player.isOnline() || actionBarPaused)
return;
118 var newEntityStates =
new ArrayList<Entity>();
120 var playerWorld = player.getWorld();
121 for (var entity : playerWorld.getEntities()){
122 if (entityTypeExceptions.contains(entity.getType()))
continue;
123 if (uuidExceptions.contains(entity.getUniqueId()))
continue;
124 if (!isCorrectForMaskType(entity))
continue;
126 double distance = player.getLocation().distance(entity.getLocation());
127 if (distance < minDistance || distance > maxDistance)
continue;
129 newEntityStates.add(entity);
133 for (var entity : lastFrameEntities) DreamVanish.showTargetToViewer(entity, player);
134 for (var entity : newEntityStates) DreamVanish.hideTargetFromViewer(entity, player);
136 lastFrameEntities = newEntityStates;
146 private boolean isCorrectForMaskType(Entity entity){
147 return switch (entityMaskType) {
149 case LivingEntity -> entity instanceof LivingEntity;
150 case Player -> entity instanceof Player;
162 if (!actionBarPaused){
163 actionBarPaused =
true;
165 for (var entity : lastFrameEntities) DreamVanish.showTargetToViewer(entity, player);
175 if (actionBarPaused){
176 actionBarPaused =
false;
188 actionBarPaused =
true;
190 for (var entity : lastFrameEntities) DreamVanish.showTargetToViewer(entity, player);
203 private boolean deleteMaskOnNull =
false;
204 private double minDistance = 0;
205 private double maxDistance = 5;
207 private final List<UUID> uuidExceptions =
new ArrayList<>();
208 private final List<EntityType> entityTypeExceptions =
new ArrayList<>();
214 for (var type : exceptions) {
215 if (!entityTypeExceptions.contains(type)) entityTypeExceptions.add(type);
224 for (var
id : exceptions) {
225 if (!uuidExceptions.contains(
id)) uuidExceptions.add(
id);
232 this.deleteMaskOnNull = deleteMaskOnNull;
238 this.minDistance = minDistance;
244 this.maxDistance = maxDistance;
250 this.entityMaskType = entityMaskType;
262 if (player ==
null)
throw new IllegalArgumentException(
"Player cannot be null");
265 if (storedMask !=
null){
266 entityTypeExceptions.forEach(storedMask::addToExceptions);
267 uuidExceptions.forEach(storedMask::addToExceptions);
272 createdMask.player = player;
273 createdMask.deleteMaskOnNull = deleteMaskOnNull;
274 createdMask.minDistance = minDistance;
275 createdMask.maxDistance = maxDistance;
276 createdMask.entityMaskType = entityMaskType;
278 entityTypeExceptions.forEach(createdMask::addToExceptions);
279 uuidExceptions.forEach(createdMask::addToExceptions);
static final LinkedHashMap< UUID, DreamEntityMask > DreamEntityMasks
DreamEntityMask CreateMask(Player player)
/
Builder deleteMaskOnNull(boolean deleteMaskOnNull)
Configures whether to delete mask on null player reference.
Builder uuidExceptions(List< UUID > exceptions)
/
Builder minDistance(double minDistance)
Sets the minimum distance for the mask.
Builder maxDistance(double maxDistance)
Sets the maximum distance for the mask.
Builder entityMaskType(EntityMaskType entityMaskType)
Sets the mask type filter.
Builder entityTypeExceptions(List< EntityType > exceptions)
/
void addToExceptions(EntityType entityType)
/
void addToExceptions(UUID entityUUID)
/
Fired when a DreamEntityMask is created and registered for a player.
Fired when a DreamEntityMask is paused.
Fired when a DreamEntityMask is resumed (play state).
Fired when a DreamEntityMask is stopped and removed.
Defines the filter scope for an entity mask.
Player
Match only players.