Skip to content

Commit

Permalink
added getHighestX
Browse files Browse the repository at this point in the history
  • Loading branch information
NonSwag committed Apr 9, 2024
1 parent 9b8b32f commit f14d27c
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 6 deletions.
22 changes: 22 additions & 0 deletions api/src/main/java/net/thenextlvl/protect/area/Container.java
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,35 @@ default boolean contains(Entity entity) {
* Retrieves a list of entities that are contained within this container.
*
* @return a list of entities
* @see Container#getHighestEntities()
*/
List<Entity> getEntities();

/**
* Retrieves a list of players that are contained within this container.
*
* @return a list of players
* @see Container#getHighestPlayers()
*/
List<Player> getPlayers();

/**
* Retrieves a list of entities that are contained within this container.
* This method returns only those entities who's highest-area is equal to this one.
*
* @return a List of Entity objects that are contained within this container
* @see Area#getPriority()
* @see Container#getEntities()
*/
List<Entity> getHighestEntities();

/**
* Retrieves a list of players that are contained within this container.
* This method returns only those players who's highest-area is equal to this one.
*
* @return a List of Player objects that are contained within this container
* @see Area#getPriority()
* @see Container#getPlayers()
*/
List<Player> getHighestPlayers();
}
22 changes: 22 additions & 0 deletions plugin/src/main/java/net/thenextlvl/protect/area/CraftArea.java
Original file line number Diff line number Diff line change
@@ -1,24 +1,32 @@
package net.thenextlvl.protect.area;

import core.annotation.MethodsReturnNotNullByDefault;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import net.thenextlvl.protect.ProtectPlugin;
import net.thenextlvl.protect.event.AreaFlagChangeEvent;
import net.thenextlvl.protect.event.AreaFlagUnsetEvent;
import net.thenextlvl.protect.flag.Flag;
import org.bukkit.World;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

@Getter
@Setter
@ToString
@EqualsAndHashCode
@MethodsReturnNotNullByDefault
public abstract class CraftArea implements Area {
private final ProtectPlugin plugin = JavaPlugin.getPlugin(ProtectPlugin.class);
private Map<Flag<?>, @Nullable Object> flags = new LinkedHashMap<>();
private final @NamePattern String name;
private final World world;
Expand All @@ -42,6 +50,20 @@ public <T> boolean removeFlag(@NotNull Flag<T> flag) {
return event.callEvent() && Area.super.removeFlag(flag);
}

@Override
public List<Entity> getHighestEntities() {
return getEntities().stream()
.filter(player -> plugin.areaProvider().getArea(player).equals(this))
.toList();
}

@Override
public List<Player> getHighestPlayers() {
return getPlayers().stream()
.filter(player -> plugin.areaProvider().getArea(player).equals(this))
.toList();
}

@Override
public int compareTo(@NotNull Area area) {
return Integer.compare(getPriority(), area.getPriority());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,13 +51,13 @@ else if (event.getPrevious().hasFlag(plugin.flags.time))
public void onAreaFlagChange(AreaFlagChangeEvent<?> event) {
if (event.getFlag().equals(plugin.flags.weather)) {
var weather = (WeatherType) event.getNewState();
event.getArea().getPlayers().forEach(player -> {
event.getArea().getHighestPlayers().forEach(player -> {
if (weather != null) player.setPlayerWeather(weather);
else player.resetPlayerWeather();
});
} else if (event.getFlag().equals(plugin.flags.time)) {
var time = (Long) event.getNewState();
event.getArea().getPlayers().forEach(player -> {
event.getArea().getHighestPlayers().forEach(player -> {
if (time != null) player.setPlayerTime(time, false);
else player.resetPlayerTime();
});
Expand All @@ -66,9 +66,9 @@ public void onAreaFlagChange(AreaFlagChangeEvent<?> event) {

@EventHandler(priority = EventPriority.MONITOR, ignoreCancelled = true)
public void onAreaFlagUnset(AreaFlagUnsetEvent<?> event) {
if (event.getFlag().equals(plugin.flags.weather))
event.getArea().getPlayers().forEach(Player::resetPlayerWeather);
else if (event.getFlag().equals(plugin.flags.time))
event.getArea().getPlayers().forEach(Player::resetPlayerTime);
if (event.getFlag().equals(plugin.flags.weather)) {
event.getArea().getHighestPlayers().forEach(Player::resetPlayerWeather);
} else if (event.getFlag().equals(plugin.flags.time))
event.getArea().getHighestPlayers().forEach(Player::resetPlayerTime);
}
}

0 comments on commit f14d27c

Please sign in to comment.