From 2b099fd9727a7ab84b4855d0f58ae8ce8180fb73 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Thu, 27 Apr 2017 17:14:19 +0300 Subject: [PATCH] =?UTF-8?q?Bridge:=20=D0=BF=D0=B5=D1=80=D0=B2=D0=B0=D1=8F?= =?UTF-8?q?=20=D1=80=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bridge/build.gradle | 28 ++++++++++ .../java/asys/bridge/bukkit/BridgePlugin.java | 33 ++++++++++++ .../main/java/asys/bridge/client/Client.java | 53 +++++++++++++++++++ .../bridge/client/ClientPacketHandler.java | 42 +++++++++++++++ bridge/src/main/resources/plugin.yml | 11 ++++ settings.gradle | 1 + 6 files changed, 168 insertions(+) create mode 100644 bridge/build.gradle create mode 100644 bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java create mode 100644 bridge/src/main/java/asys/bridge/client/Client.java create mode 100644 bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java create mode 100644 bridge/src/main/resources/plugin.yml diff --git a/bridge/build.gradle b/bridge/build.gradle new file mode 100644 index 0000000..3f09b2a --- /dev/null +++ b/bridge/build.gradle @@ -0,0 +1,28 @@ +group = 'asys' +version = '0.1-SNAPSHOT' + +repositories { + maven { url 'https://hub.spigotmc.org/nexus/content/groups/public/' } +} + +configurations { + include + compile.extendsFrom include +} + +jar { + dependsOn configurations.include + from { configurations.include.collect { it.isDirectory() ? it : zipTree(it) } } +} + +ext { + nettyVersion = '4.0.23.Final' +} + +dependencies { + include files(project(':bridge-protocol').sourceSets.main.output.classesDir) + compile (group: 'org.bukkit', name: 'bukkit', version: '1.8.8-R0.1-SNAPSHOT') { + exclude group: 'junit' + } + compile group: 'io.netty', name: 'netty-codec', version: nettyVersion +} diff --git a/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java new file mode 100644 index 0000000..c1ee5eb --- /dev/null +++ b/bridge/src/main/java/asys/bridge/bukkit/BridgePlugin.java @@ -0,0 +1,33 @@ +/* + * DmitriyMX + * 2017-04-27 + */ +package asys.bridge.bukkit; + +import asys.bridge.client.Client; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.plugin.java.JavaPlugin; + +public class BridgePlugin extends JavaPlugin { + private Client client; + + @Override + public void onEnable() { + getLogger().info("Connect to ASys..."); + client = new Client(); + client.connect("127.0.0.1", 8779); + } + + @Override + public void onDisable() { + getLogger().info("Disconnect..."); + client.disconnect(); + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + sender.sendMessage("ASys Bridge by DmitriyMX"); + return true; + } +} diff --git a/bridge/src/main/java/asys/bridge/client/Client.java b/bridge/src/main/java/asys/bridge/client/Client.java new file mode 100644 index 0000000..4c74b03 --- /dev/null +++ b/bridge/src/main/java/asys/bridge/client/Client.java @@ -0,0 +1,53 @@ +/* + * DmitriyMX + * 2017-04-27 + */ +package asys.bridge.client; + +import asys.mcsmanager.packets.codec.PacketDecoder; +import asys.mcsmanager.packets.codec.PacketEncoder; +import asys.mcsmanager.packets.codec.PacketHandler; +import io.netty.bootstrap.Bootstrap; +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.NioSocketChannel; + +public class Client { + private EventLoopGroup group; + + public void connect(String host, int port) { + group = new NioEventLoopGroup(); + + Bootstrap bootstrap = createBootstrap(); + bootstrap.connect(host, port); + } + + public void disconnect() { + group.shutdownGracefully(); + } + + private Bootstrap createBootstrap() { + Bootstrap bootstrap = new Bootstrap(); + bootstrap.group(group) + .channel(NioSocketChannel.class) + .handler(createChannelInitializer()); + + return bootstrap; + } + + private ChannelInitializer createChannelInitializer() { + return new ChannelInitializer() { + @Override + protected void initChannel(SocketChannel socketChannel) throws Exception { + socketChannel.pipeline().addLast( + new PacketEncoder(), + new PacketDecoder(), + new PacketHandler(), + new ClientPacketHandler() + ); + } + }; + } +} diff --git a/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java b/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java new file mode 100644 index 0000000..af5c81f --- /dev/null +++ b/bridge/src/main/java/asys/bridge/client/ClientPacketHandler.java @@ -0,0 +1,42 @@ +/* + * DmitriyMX + * 2017-04-27 + */ +package asys.bridge.client; + +import asys.mcsmanager.packets.CS_Handshake; +import asys.mcsmanager.packets.IPacketHandler; +import asys.mcsmanager.packets.Packet; +import asys.mcsmanager.packets.SC_HandshakeResult; +import com.google.common.collect.BiMap; +import com.google.common.collect.ImmutableBiMap; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; + +import java.util.Collections; +import java.util.Map; + +import static asys.mcsmanager.packets.codec.Params.KNOWN_HANDLERS; +import static asys.mcsmanager.packets.codec.Params.KNOWN_PACKETS; + +public class ClientPacketHandler extends ChannelInboundHandlerAdapter implements IPacketHandler { + private static final BiMap> handshakePackets = ImmutableBiMap.of( + 1, CS_Handshake.class, + 2, SC_HandshakeResult.class + ); + private static final Map, IPacketHandler> handshakeHandlers = Collections.emptyMap(); + + @Override + public void channelActive(ChannelHandlerContext context) throws Exception { + context.channel().attr(KNOWN_PACKETS).set(handshakePackets); + context.channel().attr(KNOWN_HANDLERS).set(handshakeHandlers); + + CS_Handshake packet = new CS_Handshake("SpigotServer0", "testpassphrase"); + context.channel().writeAndFlush(packet); + } + + @Override + public void handle(Packet packet, ChannelHandlerContext context) { + + } +} diff --git a/bridge/src/main/resources/plugin.yml b/bridge/src/main/resources/plugin.yml new file mode 100644 index 0000000..7079c76 --- /dev/null +++ b/bridge/src/main/resources/plugin.yml @@ -0,0 +1,11 @@ +name: HelpCenter +main: asys.bridge.bukkit.BridgePlugin +version: 0.1 + +author: DmitriyMX + +commands: + asysbridge: + aliases: ['asys', 'bridge'] + usage: / + description: ASys Bridge \ No newline at end of file diff --git a/settings.gradle b/settings.gradle index 756f383..df0ccb4 100644 --- a/settings.gradle +++ b/settings.gradle @@ -3,3 +3,4 @@ include 'core' include 'webinterface' include 'mcserver-manager' include 'bridge-protocol' +include 'bridge'