Minestom/src/main/java/net/minestom/server/MinecraftServer.java

184 lines
6.3 KiB
Java
Raw Normal View History

2020-04-24 03:25:58 +02:00
package net.minestom.server;
2019-08-03 15:25:24 +02:00
2020-04-24 03:25:58 +02:00
import net.minestom.server.benchmark.BenchmarkManager;
import net.minestom.server.command.CommandManager;
import net.minestom.server.data.DataManager;
import net.minestom.server.entity.EntityManager;
import net.minestom.server.entity.Player;
import net.minestom.server.instance.InstanceManager;
import net.minestom.server.instance.block.BlockManager;
import net.minestom.server.listener.manager.PacketListenerManager;
import net.minestom.server.network.ConnectionManager;
import net.minestom.server.network.PacketProcessor;
import net.minestom.server.network.netty.NettyServer;
import net.minestom.server.network.packet.server.play.ServerDifficultyPacket;
import net.minestom.server.recipe.RecipeManager;
import net.minestom.server.registry.RegistryMain;
import net.minestom.server.scoreboard.TeamManager;
import net.minestom.server.timer.SchedulerManager;
import net.minestom.server.world.Difficulty;
2019-08-03 15:25:24 +02:00
2020-02-17 17:33:53 +01:00
public class MinecraftServer {
2019-08-03 15:25:24 +02:00
2020-04-13 17:17:21 +02:00
// Threads
public static final String THREAD_NAME_BENCHMARK = "Ms-Benchmark";
2020-04-17 01:16:02 +02:00
public static final String THREAD_NAME_MAIN_UPDATE = "Ms-MainUpdate";
2020-04-17 03:44:00 +02:00
public static final int THREAD_COUNT_MAIN_UPDATE = 1; // Keep it to 1
2020-04-17 01:16:02 +02:00
2020-04-13 17:17:21 +02:00
public static final String THREAD_NAME_PACKET_WRITER = "Ms-PacketWriterPool";
2019-09-02 06:02:12 +02:00
public static final int THREAD_COUNT_PACKET_WRITER = 2;
2020-04-13 17:17:21 +02:00
public static final String THREAD_NAME_IO = "Ms-IOPool";
2019-09-07 11:42:33 +02:00
public static final int THREAD_COUNT_IO = 2;
2020-04-13 17:17:21 +02:00
public static final String THREAD_NAME_BLOCK_BATCH = "Ms-BlockBatchPool";
2019-09-07 11:42:33 +02:00
public static final int THREAD_COUNT_BLOCK_BATCH = 2;
2020-04-13 17:17:21 +02:00
public static final String THREAD_NAME_BLOCK_UPDATE = "Ms-BlockUpdatePool";
2019-09-21 20:42:27 +02:00
public static final int THREAD_COUNT_BLOCK_UPDATE = 2;
2020-04-13 17:17:21 +02:00
public static final String THREAD_NAME_ENTITIES = "Ms-EntitiesPool";
2019-09-02 06:02:12 +02:00
public static final int THREAD_COUNT_ENTITIES = 2;
2020-04-13 17:17:21 +02:00
public static final String THREAD_NAME_ENTITIES_PATHFINDING = "Ms-EntitiesPathFinding";
2020-04-09 14:25:42 +02:00
public static final int THREAD_COUNT_ENTITIES_PATHFINDING = 2;
2020-04-13 17:17:21 +02:00
public static final String THREAD_NAME_PLAYERS_ENTITIES = "Ms-PlayersPool";
public static final int THREAD_COUNT_PLAYERS_ENTITIES = 2;
2020-04-13 17:17:21 +02:00
public static final String THREAD_NAME_SCHEDULER = "Ms-SchedulerPool";
public static final int THREAD_COUNT_SCHEDULER = 1;
2020-02-17 17:33:53 +01:00
// Config
2020-04-17 01:16:02 +02:00
public static final int CHUNK_VIEW_DISTANCE = 10;
public static final int ENTITY_VIEW_DISTANCE = 5;
2019-09-23 19:56:08 +02:00
// Can be modified at performance cost when decreased
2020-02-09 15:34:09 +01:00
private static final int MS_TO_SEC = 1000;
public static final int TICK_MS = MS_TO_SEC / 20;
public static final int TICK_PER_SECOND = MS_TO_SEC / TICK_MS;
2020-03-29 20:58:30 +02:00
2019-08-11 00:36:20 +02:00
// Networking
2019-08-03 15:25:24 +02:00
private static PacketProcessor packetProcessor;
private static PacketListenerManager packetListenerManager;
2020-04-17 01:16:02 +02:00
private static NettyServer nettyServer;
2019-08-03 15:25:24 +02:00
2019-08-11 00:36:20 +02:00
// In-Game Manager
2020-04-15 16:35:25 +02:00
private static ConnectionManager connectionManager;
2019-08-11 07:42:56 +02:00
private static InstanceManager instanceManager;
2019-08-18 23:52:11 +02:00
private static BlockManager blockManager;
2019-08-11 00:36:20 +02:00
private static EntityManager entityManager;
2020-04-01 13:16:18 +02:00
private static CommandManager commandManager;
private static RecipeManager recipeManager;
2019-09-01 06:18:41 +02:00
private static DataManager dataManager;
2019-09-21 20:42:27 +02:00
private static TeamManager teamManager;
2019-09-23 19:56:08 +02:00
private static SchedulerManager schedulerManager;
2020-04-13 17:17:21 +02:00
private static BenchmarkManager benchmarkManager;
2019-08-03 15:25:24 +02:00
2020-04-17 01:16:02 +02:00
private static UpdateManager updateManager;
2020-02-17 17:33:53 +01:00
private static MinecraftServer minecraftServer;
2020-04-15 16:35:25 +02:00
// Data
private static Difficulty difficulty = Difficulty.NORMAL;
2020-02-17 17:33:53 +01:00
public static MinecraftServer init() {
2019-08-03 15:25:24 +02:00
connectionManager = new ConnectionManager();
2019-08-11 00:36:20 +02:00
packetProcessor = new PacketProcessor();
packetListenerManager = new PacketListenerManager();
2019-08-11 00:36:20 +02:00
2019-08-11 07:42:56 +02:00
instanceManager = new InstanceManager();
2019-08-18 23:52:11 +02:00
blockManager = new BlockManager();
2019-08-11 00:36:20 +02:00
entityManager = new EntityManager();
2020-04-01 13:16:18 +02:00
commandManager = new CommandManager();
recipeManager = new RecipeManager();
2019-09-01 06:18:41 +02:00
dataManager = new DataManager();
2019-09-21 20:42:27 +02:00
teamManager = new TeamManager();
2019-09-23 19:56:08 +02:00
schedulerManager = new SchedulerManager();
2020-04-13 17:17:21 +02:00
benchmarkManager = new BenchmarkManager();
2019-08-03 15:25:24 +02:00
2020-04-17 01:16:02 +02:00
updateManager = new UpdateManager();
nettyServer = new NettyServer(packetProcessor);
2019-09-02 06:02:12 +02:00
2020-04-10 10:31:49 +02:00
// Registry
RegistryMain.registerBlocks();
2020-04-10 12:45:04 +02:00
RegistryMain.registerItems();
RegistryMain.registerEntities();
2020-04-10 13:18:03 +02:00
RegistryMain.registerSounds();
2020-04-15 13:20:28 +02:00
RegistryMain.registerParticles();
2020-04-17 15:58:07 +02:00
RegistryMain.registerStats();
2020-04-10 10:31:49 +02:00
2020-02-17 17:33:53 +01:00
minecraftServer = new MinecraftServer();
return minecraftServer;
}
2020-04-15 16:35:25 +02:00
public static Difficulty getDifficulty() {
return difficulty;
}
public static void setDifficulty(Difficulty difficulty) {
MinecraftServer.difficulty = difficulty;
for (Player player : connectionManager.getOnlinePlayers()) {
ServerDifficultyPacket serverDifficultyPacket = new ServerDifficultyPacket();
serverDifficultyPacket.difficulty = difficulty;
serverDifficultyPacket.locked = true;
player.getPlayerConnection().sendPacket(serverDifficultyPacket);
}
}
2020-02-17 17:33:53 +01:00
public static PacketListenerManager getPacketListenerManager() {
return packetListenerManager;
}
2020-04-17 01:16:02 +02:00
public static NettyServer getNettyServer() {
return nettyServer;
2020-02-17 17:33:53 +01:00
}
public static InstanceManager getInstanceManager() {
return instanceManager;
}
public static BlockManager getBlockManager() {
return blockManager;
}
public static EntityManager getEntityManager() {
return entityManager;
}
2020-04-01 13:16:18 +02:00
public static CommandManager getCommandManager() {
return commandManager;
}
public static RecipeManager getRecipeManager() {
return recipeManager;
}
2020-02-17 17:33:53 +01:00
public static DataManager getDataManager() {
return dataManager;
}
public static TeamManager getTeamManager() {
return teamManager;
}
public static SchedulerManager getSchedulerManager() {
return schedulerManager;
}
2020-04-13 17:17:21 +02:00
public static BenchmarkManager getBenchmarkManager() {
return benchmarkManager;
}
2020-02-17 17:33:53 +01:00
public static ConnectionManager getConnectionManager() {
return connectionManager;
}
public void start(String address, int port) {
2020-04-17 01:16:02 +02:00
updateManager.start();
nettyServer.start(address, port);
}
2019-08-10 08:44:35 +02:00
2019-08-03 15:25:24 +02:00
}