- Баллы
- 31
- Имя в Minecraft
- Copter533
Как сделать плагин для сервера хаба так, чтобы на него была минимальная возможная нагрузка (отключить все прощёты мира, оставить только обработку игроков).
То что я пока успел придумать (не судите строго, я последний раз за плагины брался полгода назад):
Версия игры - 1.16.5
То что я пока успел придумать (не судите строго, я последний раз за плагины брался полгода назад):
Код:
public final class Hub extends JavaPlugin implements Listener {
public static Hub instance;
@Override
public void onEnable() {
System.out.println("Hub working!");
getServer().getPluginManager().registerEvents(this, this);
System.out.println(Bukkit.getWorld("source"));
for (World world : getServer().getWorlds()) {
if (world.getName() == "world" || world.getName() == "source") { // "source" - мир в котором будет карта хаба, все остальные миры - просто отдельные под лобби
System.out.printf("Skipping world \"%s\"\n", world.getName()); continue;
}
System.out.printf("Optimizing world \"%s\" ... ", world.getName());
world.setKeepSpawnInMemory(false);
world.setGameRule(GameRule.RANDOM_TICK_SPEED,0);
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE,false);
world.setGameRule(GameRule.DO_WEATHER_CYCLE,false);
world.setGameRule(GameRule.DO_MOB_SPAWNING,false);
world.setGameRule(GameRule.DO_MOB_LOOT,false);
world.setGameRule(GameRule.MOB_GRIEFING,false);
for (Chunk chunk : world.getLoadedChunks()) {
chunk.unload(false);
}
// world.chunk Тут надо как-то генератор поставить
world.setNoTickViewDistance(2);
world.setViewDistance(2);
System.out.println("DONE");
}
instance = this;
}
@EventHandler
public void onPlayerMessage(AsyncChatEvent event) {
event.setCancelled(true);
Player player = event.getPlayer();
Bukkit.broadcast(
Component.text("[ХАБ] ").color(TextColor.color(0xFF3E)).append(
Component.text(player.getName()).color(TextColor.color(0xFFCF10)).append(
Component.text(" » ").color(TextColor.color(0x333333)).append(
event.message().color(TextColor.color(0xffffff))
))).hoverEvent(HoverEvent.showText(
Component.text("Лобби номер ").color(TextColor.color(0xffffff)).append(
Component.text("#???").color(TextColor.color(0xFF3E))
))));
}
}
Код:
Код:
public class CustomChunkGenerator extends ChunkGenerator {
private final ChunkData emptyChunk;
public CustomChunkGenerator(String source) {
World world = Hub.instance.getServer().createWorld(new WorldCreator(source));
assert world != null;
emptyChunk = super.createChunkData(world);
emptyChunk.setRegion(0, 0, 0, 16, world.getMaxHeight(), 16, Material.AIR);
}
@Override
public @NotNull ChunkData createVanillaChunkData(@NotNull World world, int x, int z) {
if (x == 0 && z == 0) {
return super.createVanillaChunkData(world, x, z);
// Для теста взят нулевой чанк мира и генерация ванилы,
// в будущем здесь будет браться чанк из источника (мира "source") на соответствующих коордах
} else {
return emptyChunk;
}
}
}
Версия игры - 1.16.5