Skip to content

Commit

Permalink
Optimized a bit iterations over island members in some cases
Browse files Browse the repository at this point in the history
  • Loading branch information
OmerBenGera committed Sep 25, 2022
1 parent 6a8a12e commit 6e3bda7
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 26 deletions.
Expand Up @@ -202,9 +202,10 @@ public static void resetChunksExcludedFromList(Island island, Collection<ChunkPo
}

public static void sendMessage(Island island, Message message, List<UUID> ignoredMembers, Object... args) {
island.getIslandMembers(true).stream()
.filter(superiorPlayer -> !ignoredMembers.contains(superiorPlayer.getUniqueId()))
.forEach(superiorPlayer -> message.send(superiorPlayer, args));
for (SuperiorPlayer islandMember : island.getIslandMembers(true)) {
if (!ignoredMembers.contains(islandMember.getUniqueId()))
message.send(islandMember, args);
}
}

public static double getGeneratorPercentageDecimal(Island island, Key key, World.Environment environment) {
Expand Down
51 changes: 28 additions & 23 deletions src/main/java/com/bgsoftware/superiorskyblock/island/SIsland.java
Expand Up @@ -1255,20 +1255,22 @@ public void setDescription(String description) {

@Override
public void disbandIsland() {
getIslandMembers(true).forEach(superiorPlayer -> {
if (superiorPlayer.equals(owner)) {
forEachIslandMember(Collections.emptyList(), false, islandMember -> {
if (islandMember.equals(owner)) {
owner.setIsland(null);
} else {
kickMember(superiorPlayer);
kickMember(islandMember);
}

if (plugin.getSettings().isDisbandInventoryClear())
plugin.getNMSPlayers().clearInventory(superiorPlayer.asOfflinePlayer());
plugin.getNMSPlayers().clearInventory(islandMember.asOfflinePlayer());

plugin.getMissions().getAllMissions().stream().filter(mission -> {
for (Mission<?> mission : plugin.getMissions().getAllMissions()) {
MissionData missionData = plugin.getMissions().getMissionData(mission).orElse(null);
return missionData != null && missionData.isDisbandReset();
}).forEach(superiorPlayer::resetMission);
if (missionData != null && missionData.isDisbandReset()) {
islandMember.resetMission(mission);
}
}
});

invitedPlayers.forEach(invitedPlayer -> invitedPlayer.removeInvite(this));
Expand Down Expand Up @@ -1612,13 +1614,11 @@ public void sendMessage(String message, UUID... ignoredMembers) {
Preconditions.checkNotNull(message, "message parameter cannot be null.");
Preconditions.checkNotNull(ignoredMembers, "ignoredMembers parameter cannot be null.");

List<UUID> ignoredList = Arrays.asList(ignoredMembers);
List<UUID> ignoredList = ignoredMembers.length == 0 ? Collections.emptyList() : Arrays.asList(ignoredMembers);

PluginDebugger.debug("Action: Send Message, Island: " + owner.getName() + ", Ignored Members: " + ignoredList + ", Message: " + message);

getIslandMembers(true).stream()
.filter(superiorPlayer -> !ignoredList.contains(superiorPlayer.getUniqueId()))
.forEach(superiorPlayer -> Message.CUSTOM.send(superiorPlayer, message, false));
forEachIslandMember(ignoredList, false, islandMember -> Message.CUSTOM.send(islandMember, message, false));
}

@Override
Expand All @@ -1633,38 +1633,35 @@ public void sendMessage(IMessageComponent messageComponent, List<UUID> ignoredMe

PluginDebugger.debug("Action: Send Message, Island: " + owner.getName() + ", Ignored Members: " + ignoredMembers + ", Message: " + messageComponent.getMessage());

getIslandMembers(true).stream()
.filter(superiorPlayer -> !ignoredMembers.contains(superiorPlayer.getUniqueId()) && superiorPlayer.isOnline())
.forEach(superiorPlayer -> messageComponent.sendMessage(superiorPlayer.asPlayer(), args));
forEachIslandMember(ignoredMembers, false, islandMember -> messageComponent.sendMessage(islandMember.asPlayer(), args));
}

@Override
public void sendTitle(@Nullable String title, @Nullable String subtitle, int fadeIn, int duration,
int fadeOut, UUID... ignoredMembers) {
Preconditions.checkNotNull(ignoredMembers, "ignoredMembers parameter cannot be null.");

List<UUID> ignoredList = Arrays.asList(ignoredMembers);
List<UUID> ignoredList = ignoredMembers.length == 0 ? Collections.emptyList() : Arrays.asList(ignoredMembers);

PluginDebugger.debug("Action: Send Title, Island: " + owner.getName() + ", Ignored Members: " + ignoredList + ", Title: " + title + ", Subtitle: " + subtitle);

getIslandMembers(true).stream()
.filter(superiorPlayer -> !ignoredList.contains(superiorPlayer.getUniqueId()) && superiorPlayer.isOnline())
.forEach(superiorPlayer -> plugin.getNMSPlayers().sendTitle(superiorPlayer.asPlayer(),
title, subtitle, fadeIn, duration, fadeOut));
forEachIslandMember(ignoredList, true, islandMember ->
plugin.getNMSPlayers().sendTitle(islandMember.asPlayer(), title, subtitle, fadeIn, duration, fadeOut)
);
}

@Override
public void executeCommand(String command, boolean onlyOnlineMembers, UUID... ignoredMembers) {
Preconditions.checkNotNull(command, "command parameter cannot be null.");
Preconditions.checkNotNull(ignoredMembers, "ignoredMembers parameter cannot be null.");

List<UUID> ignoredList = Arrays.asList(ignoredMembers);
List<UUID> ignoredList = ignoredMembers.length == 0 ? Collections.emptyList() : Arrays.asList(ignoredMembers);

PluginDebugger.debug("Action: Execute Command, Island: " + owner.getName() + ", Ignored Members: " + ignoredList + ", Command: " + command);

getIslandMembers(true).stream()
.filter(superiorPlayer -> !ignoredList.contains(superiorPlayer.getUniqueId()) && (!onlyOnlineMembers || superiorPlayer.isOnline()))
.forEach(superiorPlayer -> Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}", superiorPlayer.getName())));
forEachIslandMember(ignoredList, true, islandMember ->
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), command.replace("{player-name}", islandMember.getName()))
);
}

@Override
Expand Down Expand Up @@ -3958,6 +3955,14 @@ private void loadIslandWarp(IslandWarp islandWarp) {
warpsByLocation.put(new LocationKey(location), islandWarp);
}

private void forEachIslandMember(List<UUID> ignoredMembers, boolean onlyOnline, Consumer<SuperiorPlayer> islandMemberConsumer) {
for (SuperiorPlayer islandMember : getIslandMembers(true)) {
if (!ignoredMembers.contains(islandMember) && (!onlyOnline || islandMember.isOnline())) {
islandMemberConsumer.accept(islandMember);
}
}
}

private static int getGeneratedSchematicBitMask(World.Environment environment) {
switch (environment) {
case NORMAL:
Expand Down

0 comments on commit 6e3bda7

Please sign in to comment.