/
minecraftbackup
/
AnarchyExploitFixes
Обзор
Документация
Войти
/
minecraftbackup
/
AnarchyExploitFixes
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
AnarchyExploitFixesFolia/src/main/java/me/xginko/aef/modules/chunklimits/TileEntityLimit.java
68 строк
3 KB
xGinko
rework comments in folia build
06 июн 2024, 23:22
06 июн 2024, 23:22
d3bbe93
Код
Авторство
О чём код?
package me.xginko.aef.modules.chunklimits; import io.papermc.paper.threadedregions.scheduler.ScheduledTask; import me.xginko.aef.modules.AEFModule; import me.xginko.aef.utils.LocationUtil; import org.bukkit.Chunk; import org.bukkit.Material; import org.bukkit.World; import org.bukkit.block.BlockState; import org.bukkit.event.HandlerList; import org.bukkit.event.Listener; import java.util.function.Consumer; public class TileEntityLimit extends AEFModule implements Consumer<ScheduledTask>, Listener { private ScheduledTask scheduledTask; private final long checkPeriod; private final int maxTileEntities; private final boolean logIsEnabled; public TileEntityLimit() { super("chunk-limits.entity-limits.tile-entity-limit"); config.addComment(configPath + ".enable", """ Limit the amount of tile entities in a chunk to prevent lag."""); this.logIsEnabled = config.getBoolean(configPath + ".log-removals", true); this.maxTileEntities = config.getInt(configPath + ".max-tile-entities-per-chunk", 100); this.checkPeriod = config.getInt(configPath + ".check-period-in-ticks", 20); } @Override public void enable() { plugin.getServer().getPluginManager().registerEvents(this, plugin); scheduledTask = plugin.getServer().getGlobalRegionScheduler() .runAtFixedRate(plugin, this, checkPeriod, checkPeriod); } @Override public boolean shouldEnable() { return config.getBoolean(configPath + ".enable", false); } @Override public void disable() { if (scheduledTask != null) scheduledTask.cancel(); HandlerList.unregisterAll(this); } @Override public void accept(ScheduledTask task) { for (World world : plugin.getServer().getWorlds()) { for (Chunk chunk : world.getLoadedChunks()) { plugin.getServer().getRegionScheduler().execute(plugin, world, chunk.getX(), chunk.getZ(), () -> { BlockState[] tileEntities = chunk.getTileEntities(false); int tooMany = tileEntities.length - maxTileEntities; if (tooMany <= 0) return; for (int i = 0; i < tooMany; i++) { tileEntities[i].setType(Material.AIR); if (logIsEnabled) info( "Removed tile entity at "+LocationUtil.toString(tileEntities[i].getLocation())+ " because reached limit of "+maxTileEntities); } }); } } } }