Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.00 KB | None | 0 0
  1. // simple-proxy.js
  2.  
  3. var mc = require('minecraft-protocol')
  4.  
  5. var states = mc.states
  6.  
  7. var options = {
  8. proxy: {
  9. port: '25565'
  10. },
  11. target: {
  12. host: 'mc.example.com',
  13. port: '25565'
  14. },
  15. login: {
  16. username: '',
  17. password: ''
  18. },
  19. version: '1.9'
  20. }
  21.  
  22. var proxyOptions = {
  23. 'online-mode': false,
  24. port: options.proxy.port,
  25. keepAlive: false,
  26. version: options.version
  27. }
  28.  
  29. var proxy = mc.createServer(proxyOptions)
  30.  
  31. proxy.on('login', (client) => {
  32. var addr = client.socket.remoteAddress
  33. var endedClient = false
  34. var endedTargetClient = false
  35.  
  36. console.log(`Client connected from ${addr}`)
  37.  
  38. client.on('end', () => {
  39. endedClient = true
  40. console.log(`Connection closed by ${addr}`)
  41. if (!endedTargetClient) targetClient.end('End')
  42. })
  43.  
  44. client.on('error', (err) => {
  45. endedClient = true
  46. console.log(`Connection error by ${addr}`)
  47. console.log(err.stack)
  48. if (!endedTargetClient) targetClient.end('Error')
  49. })
  50.  
  51. var targetOptions = {
  52. host: options.target.host,
  53. port: options.target.port,
  54. username: options.login.username,
  55. password: options.login.password || false,
  56. keepAlive: false,
  57. version: options.version
  58. }
  59.  
  60. var targetClient = mc.createClient(targetOptions)
  61.  
  62. client.on('packet', (data, meta) => {
  63. if(targetClient.state == states.PLAY && meta.state == states.PLAY && !endedTargetClient) targetClient.write(meta.name, data)
  64. })
  65.  
  66. targetClient.on('packet', (data, meta) => {
  67. if(meta.state == states.PLAY && client.state == states.PLAY && !endedClient) {
  68. client.write(meta.name, data)
  69. if (meta.name === 'set_compression') client.compressionThreshold = data.threshold
  70. }
  71. })
  72.  
  73. targetClient.on('end', () => {
  74. endedTargetClient = true
  75. console.log(`Connection closed by server for ${addr}`)
  76. if(!endedClient) client.end('End')
  77. })
  78.  
  79. targetClient.on('error', (err) => {
  80. endedTargetClient = true
  81. console.log(`Connection error by server ${addr}`)
  82. console.log(err.stack)
  83. if (!endedClient) client.end('Error')
  84. })
  85. })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement