import os.path from utils import * import rtoml as toml script_license() print("开始优化!") danger = ask("是否开启危险优化(会严重影响玩家体验)?") @handler('server.properties', ServerPropLoader.load, ServerPropLoader.dump) def optimize_prop(properties): properties["view-distance"] = 7 properties["allow-flight"] = "true" properties["use-native-transport"] = "true" properties["simulation-distance"] = 4 @handler('bukkit.yml') def optimize_bukkit(bukkit): bukkit["spawn-limits"] = { "monsters": 20, "animals": 5, "water-animals": 2, "water-ambient": 2, "ambient": 1, "axolotls": 3, "water-underground-creature": 3 } bukkit["chunk-gc"]["period-in-ticks"] = 400 bukkit["ticks-per"] = { "animal-spawns": 400, "monster-spawns": 10, "water-spawns": 400, "water-ambient-spawns": 400, "water-underground-creature-spawns": 400, "axolotl-spawns": 400, "ambient-spawns": 400, "autosave": 6000 } @handler('spigot.yml') def optimize_spigot(spigot): spigot["world-settings"]["default"]["mob-spawn-range"] = 3 r = spigot["world-settings"]["default"]["entity-activation-range"] r["animals"] = 16 r["monsters"] = 24 r["raiders"] = 48 r["misc"] = 8 r["water"] = 8 r["villagers"] = 16 r["flying-monsters"] = 48 r["tick-inactive-villagers"] = False spigot["world-settings"]["default"]["nerf-spawner-mobs"] = True spigot["world-settings"]["default"]["merge-radius"] = { "item": 3.5, "exp": 4.0 } if danger: spigot["world-settings"]["default"]["ticks-per"] = { "hopper-transfer": 4, "hopper-check": 4 } @handler(r'config/paper-global.yml') def optimize_paper_global(paper): paper["timings"]["enabled"] = False @handler("paper.yml" if os.path.isfile("paper.yml") else r'config/paper-world-defaults.yml') def optimize_paper_world(paper): paper["chunks"]["delay-chunk-unloads-by"] = "10s" paper["chunks"]["max-auto-save-chunks-per-tick"] = 8 paper["chunks"]["prevent-moving-into-unloaded-chunks"] = True paper["chunks"]["entity-per-chunk-save-limit"] = { "area_effect_cloud": 8, "arrow": 16, "breeze_wind_charge": 8, "dragon_fireball": 3, "egg": 8, "ender_pearl": 8, "experience_bottle": 3, "experience_orb": 16, "eye_of_ender": 8, "fireball": 8, "firework_rocket": 8, "llama_spit": 3, "potion": 8, "shulker_bullet": 8, "small_fireball": 8, "snowball": 8, "spectral_arrow": 16, "trident": 16, "wither_skull": 4 } paper["entities"]["armor-stands"]["tick"] = False paper["entities"]["armor-stands"]["do-collision-entity-lookups"] = False paper["entities"]["spawning"]["alt-item-despawn-rate"] = { "enabled": True, "items": { "cobblestone": 300, "netherrack": 300, "sand": 300, "red_sand": 300, "gravel": 300, "dirt": 300, "short_grass": 300, "pumpkin": 300, "melon_slice": 300, "kelp": 300, "bamboo": 300, "sugar_cane": 300, "twisting_vines": 300, "weeping_vines": 300, "oak_leaves": 300, "spruce_leaves": 300, "birch_leaves": 300, "jungle_leaves": 300, "acacia_leaves": 300, "dark_oak_leaves": 300, "cherry_leaves": 300, "mangrove_leaves": 300, "cactus": 300, "diorite": 300, "granite": 300, "andesite": 300, "scaffolding": 600 } } paper["entities"]["spawning"]["despawn-ranges"] = { "ambient": { "hard": 72, "soft": 30 }, "axolotls": { "hard": 72, "soft": 30 }, "creature": { "hard": 72, "soft": 30 }, "misc": { "hard": 72, "soft": 30 }, "monster": { "hard": 72, "soft": 30 }, "underground_water_creature": { "hard": 72, "soft": 30 }, "water_ambient": { "hard": 72, "soft": 30 }, "water_creature": { "hard": 72, "soft": 30 } } paper["entities"]["spawning"]["non-player-arrow-despawn-rate"] = 20 paper["entities"]["spawning"]["creative-arrow-despawn-rate"] = 20 if not danger: paper["entities"]["behavior"]["spawner-nerfed-mobs-should-jump"] = True paper["collisions"]["max-entity-collisions"] = 2 paper["collisions"]["fix-climbing-bypassing-cramming-rule"] = True paper["misc"]["update-pathfinding-on-block-update"] = False paper["misc"]["redstone-implementation"] = "ALTERNATE_CURRENT" if not (os.path.exists("pufferfish.yml") or os.path.exists("leaf_config/leaf_global_config.toml") or os.path.exists("config/leaf-global.yml")): paper["tick-rates"]["behavior"] = { "villager": { "validatenearbypoi": 60, "acquirepoi": 120 } } paper["tick-rates"]["sensor"] = { "villager": { "secondarypoisensor": 80, "nearestbedsensor": 80, "villagerbabiessensor": 40, "playersensor": 40, "nearestlivingentitysensor": 40 } } paper["hopper"]["disable-move-event"] = False paper["hopper"]["ignore-occluding-blocks"] = True paper["tick-rates"]["mob-spawner"] = 2 paper["tick-rates"]["grass-spread"] = 4 paper["tick-rates"]["container-update"] = 1 paper["environment"]["optimize-explosions"] = True if danger: paper["environment"]["treasure-maps"]["enabled"] = False paper["environment"]["nether-ceiling-void-damage-height"] = 127 paper["environment"]["treasure-maps"]["find-already-discovered"] = { "loot-tables": True, "villager-trade": True } paper["tick-rates"]["wet-farmland"] = 2 paper["spawn"]["keep-spawn-loaded"] = False paper["spawn"]["keep-spawn-loaded-range"] = 3 @handler('config/gale-world-defaults.yml') def optimize_gale_world(gale): gale["small-optimizations"]["max-projectile-chunk-loads"]["per-tick"] = 2 gale["small-optimizations"]["max-projectile-chunk-loads"]["per-projectile"][ "reset-movement-after-reach-limit"] = True if danger: gale["small-optimizations"]["max-projectile-chunk-loads"]["per-projectile"][ "remove-from-world-after-reach-limit"] = True gale["small-optimizations"]["reduced-intervals"]["acquire-poi-for-stuck-entity"] = 200 gale["small-optimizations"]["reduced-intervals"]["check-nearby-item"]["hopper"]["interval"] = 50 gale["small-optimizations"]["reduced-intervals"]["check-nearby-item"]["hopper"]["minecart"]["temporary-immunity"][ "duration"] = 75 gale["small-optimizations"]["reduced-intervals"]["check-nearby-item"]["hopper"]["minecart"]["temporary-immunity"][ "nearby-item-max-age"] = 600 gale["gameplay-mechanics"]["arrow-movement-resets-despawn-counter"] = False gale["small-optimizations"]["save-fireworks"] = False @handler('config/gale-global.yml') def optimize_gale_global(gale): gale["small-optimizations"]["reduced-intervals"]["increase-time-statistics"] = 100 gale["small-optimizations"]["reduced-intervals"]["update-entity-line-of-sight"] = 10 @handler('pufferfish.yml') def optimize_pufferfish(pufferfish): pufferfish["projectile"]["max-loads-per-projectile"] = 8 dab = pufferfish["dab"] dab["enabled"] = True dab["max-tick-freq"] = 20 dab["activation-dist-mod"] = 7 pufferfish["enable-async-mob-spawning"] = True pufferfish["enable-suffocation-optimization"] = True pufferfish["inactive-goal-selector-throttle"] = True pufferfish["misc"]["disable-method-profiler"] = True @handler('purpur.yml') def optimize_purpur(purpur): purpur["settings"]["use-alternate-keepalive"] = True purpur["world-settings"]["default"]["mobs"]["zombie"]["aggressive-towards-villager-when-lagging"] = False if not danger: purpur["settings"]["lagging-threshold"] = 18 if danger: purpur["world-settings"]["default"]["mobs"]["villager"]["lobotomize"]["enabled"] = True purpur["world-settings"]["default"]["mobs"]["villager"]["lobotomize"]["search-radius"] = { "acquire-poi": 16, "nearest-bed-sensor": 16 } purpur["world-settings"]["default"]["mobs"]["dolphin"]["disable-treasure-searching"] = True purpur["world-settings"]["default"]["gameplay-mechanics"]["entities-can-use-portals"] = False purpur["world-settings"]["default"]["gameplay-mechanics"]["player"]["teleport-if-outside-border"] = True @handler("leaf_config/leaf_global_config.toml", toml.load, toml.dump) def optimize_leaf_legacy(leaf): leaf["async"]["async_pathfinding"]["enabled"] = True leaf["async"]["async_mob_spawning"]["enabled"] = True if ask("使用的是Java 21+"): leaf["performance"]["use_virtual_thread_for_async_scheduler"]["enabled"] = True leaf["performance"]["optimize_minecart"]["enabled"] = True dab = leaf["performance"]["dab"] dab["max-tick-freq"] = 20 dab["activation-dist-mod"] = 7 leaf["gameplay"]["disable_moved_wrongly_threshold"]["enabled"] = True leaf["performance"]["use_faster_random_generator"]["enabled"] = True @handler("config/leaf-global.yml") def optimize_leaf_global(leaf): leaf["async"]["async-pathfinding"]["enabled"] = True leaf["async"]["async-pathfinding"]["max-threads"] = os.cpu_count() / 4 leaf["async"]["async-mob-spawning"]["enabled"] = True leaf["async"]["async-entity-tracker"]["enabled"] = True leaf["async"]["async-entity-tracker"]["max-threads"] = os.cpu_count() / 2 leaf["async"]["async-locator"]["enabled"] = True leaf["async"]["async-locator"]["max-threads"] = 1 leaf["async"]["async-playerdata-save"]["enabled"] = True if ask("使用 Citizens"): leaf["async"]["async-entity-tracker"]["compat-mode"] = True if danger: leaf["performance"]["throttle-hopper-when-full"]["enabled"] = True leaf["performance"]["use-virtual-thread-for-async-scheduler"] = True leaf["performance"]["reduce-packets"]["reduce-entity-move-packets"] = True leaf["performance"]["optimize-minecart"]["enabled"] = True leaf["performance"]["faster-random-generator"]["enabled"] = True leaf["performance"]["faster-random-generator"]["enable-for-worldgen"] = True leaf["performance"]["create-snapshot-on-retrieving-blockstate"] = False if not danger: leaf["performance"]["faster-random-generator"]["use-legacy-random-for-slime-chunk"] = True dab = leaf["performance"]["dab"] dab["max-tick-freq"] = 20 dab["activation-dist-mod"] = 7 dab["start-distance"] = 8 if not danger: dab["dont-enable-if-in-water"] = True leaf["performance"]["dont-save-entity"]["dont-save-primed-tnt"] = True leaf["performance"]["dont-save-entity"]["dont-save-falling-block"] = True leaf["performance"]["entity-timeouts"]["SNOWBALL"] = 200 leaf["performance"]["entity-timeouts"]["LLAMA_SPIT"] = 150 leaf["performance"]["entity-timeouts"]["DRAGON_FIREBALL"] = 150 leaf["performance"]["entity-timeouts"]["EGG"] = 300 leaf["performance"]["entity-timeouts"]["FIREBALL"] = 600 leaf["performance"]["entity-timeouts"]["SMALL_FIREBALL"] = 400 leaf["performance"]["entity-timeouts"]["WIND_CHARGE"] = 200 leaf["performance"]["entity-timeouts"]["BREEZE_WIND_CHARGE"] = 200 leaf["performance"]["entity-timeouts"]["WITHER_SKULL"] = 200 leaf["gameplay-mechanisms"]["player"]["disable-moved-wrongly-threshold"] = True leaf["misc"]["lag-compensation"]["enabled"] = True leaf["misc"]["lag-compensation"]["enable-for-water"] = True leaf["misc"]["lag-compensation"]["enable-for-lava"] = True if __name__ == "__main__": optimize_prop() optimize_bukkit() optimize_spigot() optimize_paper_global() optimize_paper_world() optimize_pufferfish() optimize_purpur() optimize_gale_world() optimize_gale_global() if not os.path.exists("purpur.yml"): print("Purpur尚未安装") print("为什么不试一下Purpur呢?") optimize_leaf_legacy() optimize_leaf_global() exit_()