diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..cbc34df
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,106 @@
+
+
+ 4.0.0
+ MC Core
+
+ mc
+ core
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+ 1.8
+ 1.7.21
+ 2.5
+ 4.1.22.Final
+
+
+
+
+
+ org.slf4j
+ slf4j-api
+ ${slf4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-core
+ ${log4j.version}
+
+
+ org.apache.logging.log4j
+ log4j-slf4j-impl
+ ${log4j.version}
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.16.16
+
+
+
+
+ io.netty
+ netty-all
+ ${netty.version}
+
+
+
+
+
+ ${project.artifactId}-${project.version}
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.5.1
+
+ ${java.version}
+ ${java.version}
+ ${project.build.sourceEncoding}
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ 2.15
+
+ -Dfile.encoding=${project.build.sourceEncoding}
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 2.4
+
+
+
+ true
+ dependency/
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-dependency-plugin
+ 2.8
+
+
+ copy-dependencies
+ package
+
+ copy-dependencies
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/mc/core/Main.java b/src/main/java/mc/core/Main.java
new file mode 100644
index 0000000..096ddc8
--- /dev/null
+++ b/src/main/java/mc/core/Main.java
@@ -0,0 +1,22 @@
+/*
+ * DmitriyMX
+ * 2018-03-25
+ */
+package mc.core;
+
+import lombok.extern.slf4j.Slf4j;
+import mc.core.netty.NettyServer;
+
+@Slf4j
+public class Main {
+ public static void main(String[] args) {
+ log.info("Start server");
+ Server server = new NettyServer();
+ try {
+ server.start("127.0.0.1", 25565);
+ } catch (StartServerException e) {
+ log.error("Starting server error", e);
+ server.stop();
+ }
+ }
+}
diff --git a/src/main/java/mc/core/Server.java b/src/main/java/mc/core/Server.java
new file mode 100644
index 0000000..b98120e
--- /dev/null
+++ b/src/main/java/mc/core/Server.java
@@ -0,0 +1,11 @@
+/*
+ * DmitriyMX
+ * 2018-03-25
+ */
+package mc.core;
+
+public interface Server {
+ void start(String host, int port) throws StartServerException;
+ void stop();
+ boolean isRunning();
+}
diff --git a/src/main/java/mc/core/StartServerException.java b/src/main/java/mc/core/StartServerException.java
new file mode 100644
index 0000000..9005c3e
--- /dev/null
+++ b/src/main/java/mc/core/StartServerException.java
@@ -0,0 +1,11 @@
+/*
+ * DmitriyMX
+ * 2018-03-25
+ */
+package mc.core;
+
+public class StartServerException extends Exception {
+ public StartServerException(Throwable cause) {
+ super(cause);
+ }
+}
diff --git a/src/main/java/mc/core/netty/NettyServer.java b/src/main/java/mc/core/netty/NettyServer.java
new file mode 100644
index 0000000..cc3f334
--- /dev/null
+++ b/src/main/java/mc/core/netty/NettyServer.java
@@ -0,0 +1,67 @@
+/*
+ * DmitriyMX
+ * 2018-03-25
+ */
+package mc.core.netty;
+
+import io.netty.bootstrap.ServerBootstrap;
+import io.netty.channel.ChannelInitializer;
+import io.netty.channel.EventLoopGroup;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.SocketChannel;
+import io.netty.channel.socket.nio.NioServerSocketChannel;
+import io.netty.handler.logging.LoggingHandler;
+import mc.core.Server;
+import mc.core.StartServerException;
+
+public class NettyServer implements Server {
+ private EventLoopGroup bossGroup, workerGroup;
+
+ private ChannelInitializer buildChannelInitializer() {
+ return new ChannelInitializer() {
+ @Override
+ protected void initChannel(SocketChannel socketChannel) {
+ socketChannel.pipeline().addLast(
+ new LoggingHandler()
+ );
+ }
+ };
+ }
+
+ private ServerBootstrap buildServerBootstrap() {
+ ServerBootstrap bootstrap = new ServerBootstrap();
+
+ bootstrap.group(bossGroup, workerGroup)
+ .channel(NioServerSocketChannel.class)
+ .childHandler(buildChannelInitializer());
+
+ return bootstrap;
+ }
+
+ @Override
+ public void start(String host, int port) throws StartServerException {
+ bossGroup = new NioEventLoopGroup(1);
+ workerGroup = new NioEventLoopGroup();
+
+ ServerBootstrap serverBootstrap = buildServerBootstrap();
+
+ try {
+ serverBootstrap.bind(host, port).sync().channel().closeFuture().sync();
+ } catch (InterruptedException e) {
+ throw new StartServerException(e);
+ }
+ }
+
+ @Override
+ public void stop() {
+ workerGroup.shutdownGracefully();
+ bossGroup.shutdownGracefully();
+ }
+
+ @Override
+ public boolean isRunning() {
+ return bossGroup != null
+ && workerGroup != null
+ && !(bossGroup.isShutdown() && workerGroup.isShutdown());
+ }
+}
diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml
new file mode 100644
index 0000000..2da8a36
--- /dev/null
+++ b/src/main/resources/log4j2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file