LagAssist is a plugin that provides tools to prevent, analyse or resolve lag.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

101 lines
2.5 KiB

package com.entryrise.lagassist.chunks;
import org.bukkit.Bukkit;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import com.entryrise.lagassist.Main;
import com.entryrise.lagassist.utils.PaperOnly;
import com.entryrise.lagassist.utils.VersionMgr;
import com.entryrise.lagassist.utils.WorldMgr;
public class DynViewer implements Listener {
private static int maxChunks;
private static int maxView;
private static int currChunks = 0;
public static void Enabler(boolean reload) {
boolean enabled = Main.config.getBoolean("chunk-manager.enabled");
if (!enabled) {
return;
}
if (!Main.paper) {
Bukkit.getLogger().info(" §e[§a✖§e] §fChunkManager - No PaperSpigot found");
return;
}
maxChunks = Main.config.getInt("chunk-manager.max-chunks");
maxView = Main.config.getInt("chunk-manager.max-view");
if (!reload) {
Main.p.getServer().getPluginManager().registerEvents(new DynViewer(), Main.p);
runTask();
}
Bukkit.getLogger().info(" §e[§a✔§e] §fChunkManager.");
}
private static void runTask() {
Bukkit.getScheduler().runTaskTimer(Main.p, () -> setViews(), 0, 600);
}
public static void setViews() {
Main.sendDebug("Attempting to set dynamic view distance...", 1);
// Get a value that is at least the minimum view distance and at max the spigot
// view distance.
int pl = Bukkit.getOnlinePlayers().size();
if (pl == 0) {
return;
}
int vd = (int) Math.sqrt(maxChunks / pl / 4);
int newchunks = Math.max(Math.min(maxView, vd), Bukkit.getViewDistance());
if (currChunks == newchunks) {
return;
}
currChunks = newchunks;
for (World w : Bukkit.getWorlds()) {
if (WorldMgr.blacklist.contains(w.getName())) {
continue;
}
PaperOnly.setViewDistance(w, currChunks);
}
}
@EventHandler(priority = EventPriority.LOWEST)
private void onJoin(PlayerJoinEvent e) {
Player p = e.getPlayer();
Main.sendDebug("Join detected for " + p.getName(), 1);
if (VersionMgr.isNewMaterials()) {
Main.sendDebug("Is new materials in dynviewer for " + p.getName() + ". Returning... ", 1);
return;
}
// TODO: FIX Dynamic view
Bukkit.getScheduler().runTaskLater(Main.p, () -> PaperOnly.setViewDistance(p, currChunks), 25);
}
}