diff --git a/core/src/main/java/com/volmit/iris/Iris.java b/core/src/main/java/com/volmit/iris/Iris.java index 35c28a556..9aa60164e 100644 --- a/core/src/main/java/com/volmit/iris/Iris.java +++ b/core/src/main/java/com/volmit/iris/Iris.java @@ -63,6 +63,7 @@ import com.volmit.iris.util.scheduling.J; import com.volmit.iris.util.scheduling.Queue; import com.volmit.iris.util.scheduling.ShurikenQueue; import io.papermc.lib.PaperLib; +import lombok.Getter; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.serializer.ComponentSerializer; import org.bukkit.Bukkit; diff --git a/core/src/main/java/com/volmit/iris/core/IrisSettings.java b/core/src/main/java/com/volmit/iris/core/IrisSettings.java index f3ac56d5f..d06774c21 100644 --- a/core/src/main/java/com/volmit/iris/core/IrisSettings.java +++ b/core/src/main/java/com/volmit/iris/core/IrisSettings.java @@ -145,6 +145,7 @@ public class IrisSettings { public boolean dynamicPerformanceMode = true; public boolean AggressiveTectonicUnload = false; public int AggressiveTectonicThreshold = -1; // -1 = Disabled and instead uses the tectonicLimit + public int LazyPregenMaxCPM = -1; // -1 = no limit } @Data diff --git a/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java b/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java index a9bc9ff7a..9a888b7a8 100644 --- a/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java +++ b/core/src/main/java/com/volmit/iris/core/commands/CommandPregen.java @@ -19,6 +19,7 @@ package com.volmit.iris.core.commands; import com.volmit.iris.Iris; +import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.gui.PregeneratorJob; import com.volmit.iris.core.pregenerator.LazyPregenerator; import com.volmit.iris.core.pregenerator.PregenTask; @@ -78,12 +79,18 @@ public class CommandPregen implements DecreeExecutor { sender().sendMessage(C.RED + "The engine access for this world is null!"); sender().sendMessage(C.RED + "Please make sure the world is loaded & the engine is initialized. Generate a new chunk, for example."); } + int cpm = 0; + if (IrisSettings.get().getPerformance().getLazyPregenMaxCPM() == -1) { + cpm = 999999999; + } else { + cpm = IrisSettings.get().getPerformance().getLazyPregenMaxCPM(); + } LazyPregenerator.LazyPregenJob pregenJob = LazyPregenerator.LazyPregenJob.builder() .world(worldName) .healingPosition(0) .healing(false) - .chunksPerMinute(999999999) + .chunksPerMinute(cpm) .radiusBlocks(radius) .position(0) .build(); diff --git a/core/src/main/java/com/volmit/iris/core/pregenerator/LazyPregenerator.java b/core/src/main/java/com/volmit/iris/core/pregenerator/LazyPregenerator.java index 733e27100..47effb6d8 100644 --- a/core/src/main/java/com/volmit/iris/core/pregenerator/LazyPregenerator.java +++ b/core/src/main/java/com/volmit/iris/core/pregenerator/LazyPregenerator.java @@ -25,6 +25,7 @@ import org.bukkit.event.world.WorldUnloadEvent; import java.io.File; import java.io.IOException; +import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; @@ -140,9 +141,10 @@ public class LazyPregenerator extends Thread implements Listener { ); } + private final ExecutorService executorService = Executors.newSingleThreadExecutor(); + private void tickGenerate(Position2 chunk) { - BurstExecutor burstExecutor = new BurstExecutor(Executors.newFixedThreadPool(IrisSettings.get().getConcurrency().getParallelism()), lazyTotalChunks.get()); - burstExecutor.queue(() -> { + executorService.submit(() -> { if (PaperLib.isPaper()) { PaperLib.getChunkAtAsync(world, chunk.getX(), chunk.getZ(), true).thenAccept((i) -> Iris.verbose("Generated Async " + chunk)); } else { diff --git a/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java b/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java index f037d97cf..2c06eef8e 100644 --- a/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java +++ b/core/src/main/java/com/volmit/iris/core/safeguard/IrisSafeguard.java @@ -1,8 +1,6 @@ package com.volmit.iris.core.safeguard; import com.volmit.iris.Iris; -import com.volmit.iris.core.IrisSettings; -import com.volmit.iris.util.format.C; public class IrisSafeguard { public static boolean unstablemode = false; diff --git a/core/src/main/java/com/volmit/iris/core/service/DynamicPerformanceSVC.java b/core/src/main/java/com/volmit/iris/core/service/IrisEngineSVC.java similarity index 78% rename from core/src/main/java/com/volmit/iris/core/service/DynamicPerformanceSVC.java rename to core/src/main/java/com/volmit/iris/core/service/IrisEngineSVC.java index 1b9276d93..382e49e77 100644 --- a/core/src/main/java/com/volmit/iris/core/service/DynamicPerformanceSVC.java +++ b/core/src/main/java/com/volmit/iris/core/service/IrisEngineSVC.java @@ -2,40 +2,42 @@ package com.volmit.iris.core.service; import com.volmit.iris.Iris; import com.volmit.iris.core.IrisSettings; +import com.volmit.iris.core.tools.IrisToolbelt; import com.volmit.iris.engine.framework.Engine; +import com.volmit.iris.engine.object.IrisWorld; import com.volmit.iris.util.mantle.Mantle; import com.volmit.iris.util.misc.getHardware; import com.volmit.iris.util.plugin.IrisService; import com.volmit.iris.util.scheduling.Looper; +import org.bukkit.Bukkit; +import org.bukkit.World; import org.bukkit.plugin.java.JavaPlugin; import static com.volmit.iris.util.mantle.Mantle.tectonicLimit; -public class DynamicPerformanceSVC implements IrisService { +public class IrisEngineSVC implements IrisService { private JavaPlugin plugin; public Looper ticker; public Mantle mantle; - public Engine engine; + public final World IrisWorld = Bukkit.getWorld("test"); + // public Engine engine = IrisToolbelt.access(IrisWorld).getEngine(); @Override public void onEnable() { this.plugin = Iris.instance; if (IrisSettings.get().getPerformance().dynamicPerformanceMode) { this.startupPerformance(); - this.DynamicPerformance(); + this.IrisEngine(); ticker.start(); } } - public void DynamicPerformance(){ + public void IrisEngine(){ ticker = new Looper() { @Override protected long loop() { try { - if (engine.getMantle().getTectonicLimit() < engine.getMantle().getLoadedRegionCount()){ - engine.getMantle().trim(5); - return 2000; - } + } catch (Throwable e) { Iris.reportError(e); e.printStackTrace(); @@ -57,6 +59,9 @@ public class DynamicPerformanceSVC implements IrisService { tectonicLimit.set(10); } } + public void getAllIrisWorlds(){ + + } @Override public void onDisable() { diff --git a/core/src/main/java/com/volmit/iris/core/service/WorldLoadSFG.java b/core/src/main/java/com/volmit/iris/core/service/WorldLoadSFG.java new file mode 100644 index 000000000..845edf054 --- /dev/null +++ b/core/src/main/java/com/volmit/iris/core/service/WorldLoadSFG.java @@ -0,0 +1,31 @@ +package com.volmit.iris.core.service; + +import com.volmit.iris.Iris; +import com.volmit.iris.util.plugin.IrisService; +import org.bukkit.World; +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.world.WorldLoadEvent; +import org.bukkit.plugin.java.JavaPlugin; + +import static java.lang.System.getLogger; + +public class WorldLoadSFG implements IrisService { + private JavaPlugin plugin; + @EventHandler + public void onWorldLoad(WorldLoadEvent event) { + World world = event.getWorld(); + + } + + @Override + public void onEnable() { + this.plugin = Iris.instance; + plugin.getServer().getPluginManager().registerEvents(this, plugin); + } + + @Override + public void onDisable() { + + } +}