Skip to content

Commit

Permalink
a single task for all GameModes
Browse files Browse the repository at this point in the history
  • Loading branch information
HSGamer committed Apr 24, 2023
1 parent fcaf836 commit 11f3961
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 45 deletions.
25 changes: 5 additions & 20 deletions src/main/java/me/hsgamer/autoislandpurge/AutoIslandPurge.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,45 +2,30 @@

import world.bentobox.bentobox.api.addons.Addon;

import java.util.ArrayList;
import java.util.List;

public class AutoIslandPurge extends Addon {
private final Settings settings = new Settings(this);
private final List<PurgeTask> tasks = new ArrayList<>();
private final PurgeTask purgeTask = new PurgeTask(this);

@Override
public void onEnable() {
saveDefaultConfig();
settings.setup();
setupTasks();
purgeTask.setup();

registerListener(new TeleportWhenIslandDeletedListener(this));
}

@Override
public void onDisable() {
clearTasks();
purgeTask.cancel();
}

@Override
public void onReload() {
clearTasks();
purgeTask.cancel();
reloadConfig();
settings.setup();
setupTasks();
}

private void clearTasks() {
tasks.forEach(PurgeTask::cancel);
tasks.clear();
}

private void setupTasks() {
settings.getEnabledGameModes().forEach(gameModeAddon -> {
tasks.add(new PurgeTask(this, gameModeAddon));
log("Auto-Purge will apply to " + gameModeAddon.getDescription().getName());
});
purgeTask.setup();
}

public Settings getSettings() {
Expand Down
30 changes: 16 additions & 14 deletions src/main/java/me/hsgamer/autoislandpurge/PurgeTask.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.scheduler.BukkitTask;
import world.bentobox.bentobox.api.addons.GameModeAddon;
import world.bentobox.bentobox.database.objects.Island;

import java.util.Optional;
Expand All @@ -15,27 +14,21 @@

public class PurgeTask {
private final AutoIslandPurge instance;
private final GameModeAddon gameModeAddon;
private final Queue<Island> islands = new ConcurrentLinkedQueue<>();
private final BukkitTask checkTask;
private final BukkitTask deleteTask;
private BukkitTask checkTask;
private BukkitTask deleteTask;

public PurgeTask(AutoIslandPurge instance, GameModeAddon gameModeAddon) {
public PurgeTask(AutoIslandPurge instance) {
this.instance = instance;
this.gameModeAddon = gameModeAddon;

long checkTicks = instance.getSettings().getCheckTicks();
long deleteTicks = instance.getSettings().getDeleteTicks();

checkTask = Bukkit.getScheduler().runTaskTimerAsynchronously(instance.getPlugin(), this::checkIslands, checkTicks, checkTicks);
deleteTask = Bukkit.getScheduler().runTaskTimerAsynchronously(instance.getPlugin(), this::deleteOneIsland, deleteTicks, deleteTicks);
}

private void checkIslands() {
instance.getIslands().getIslands(gameModeAddon.getOverWorld())
instance.getIslands().getIslands()
.parallelStream()
.filter(i -> instance.getSettings().getEnabledGameModes().contains(i.getGameMode()))
.filter(i -> !i.isSpawn())
.filter(i -> !i.getPurgeProtected())
.filter(i -> i.getWorld().getEnvironment().equals(World.Environment.NORMAL))
.filter(Island::isOwned)
.filter(i -> i.getMembers().size() <= instance.getSettings().getMaxMemberSize())
.filter(i -> {
Expand Down Expand Up @@ -85,13 +78,22 @@ private void scheduleDelete(Island island) {
.orElse(null)
);
Bukkit.getScheduler().runTask(instance.getPlugin(), () -> {
gameModeAddon.getIslands().deleteIsland(island, true, null);
instance.getIslands().deleteIsland(island, true, null);
instance.log(log);
});
}

public void setup() {
long checkTicks = instance.getSettings().getCheckTicks();
long deleteTicks = instance.getSettings().getDeleteTicks();

checkTask = Bukkit.getScheduler().runTaskTimerAsynchronously(instance.getPlugin(), this::checkIslands, checkTicks, checkTicks);
deleteTask = Bukkit.getScheduler().runTaskTimerAsynchronously(instance.getPlugin(), this::deleteOneIsland, deleteTicks, deleteTicks);
}

public void cancel() {
if (!checkTask.isCancelled()) checkTask.cancel();
if (!deleteTask.isCancelled()) deleteTask.cancel();
islands.clear();
}
}
15 changes: 4 additions & 11 deletions src/main/java/me/hsgamer/autoislandpurge/Settings.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package me.hsgamer.autoislandpurge;

import org.bukkit.Location;
import world.bentobox.bentobox.api.addons.GameModeAddon;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class Settings {
private final AutoIslandPurge addon;
private final List<GameModeAddon> enabledGameModes = new ArrayList<>();
private List<String> enabledGameModes = Collections.emptyList();
private int offlineDays = 7;
private int maxMemberSize = 1;
private long checkTicks = 300;
Expand All @@ -21,15 +20,9 @@ public Settings(AutoIslandPurge addon) {
}

public void setup() {
enabledGameModes.clear();
var config = addon.getConfig();

var gameModes = config.getStringList("enabled-modes");
enabledGameModes.addAll(
addon.getPlugin().getAddonsManager().getGameModeAddons().stream()
.filter(gameModeAddon -> gameModes.contains(gameModeAddon.getDescription().getName()))
.toList()
);
enabledGameModes = config.getStringList("enabled-modes");
offlineDays = config.getInt("offline-days-until-purge", offlineDays);
maxMemberSize = config.getInt("purge-island-member-size", maxMemberSize);
checkTicks = config.getLong("check-purge-ticks", checkTicks);
Expand All @@ -46,7 +39,7 @@ public void setup() {
forcedSpawnLocation = config.getBoolean("forced-spawn-location", forcedSpawnLocation);
}

public List<GameModeAddon> getEnabledGameModes() {
public List<String> getEnabledGameModes() {
return enabledGameModes;
}

Expand Down

0 comments on commit 11f3961

Please sign in to comment.