Advertisement
cepmoc

bwaaa

Aug 11th, 2024 (edited)
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 4.73 KB | None | 0 0
  1. local serv = socket.tcp4(); print(serv:bind("*",25565)); print(serv:listen(25)); serv:settimeout(0,"t"); serv:setoption('reuseaddr',false)
  2. local rw = require("mcdsf")
  3. local js = require("json")
  4. local oFile = assert(io.open("/home/compec/winbck/Documents/GITREPO/TPT-Code/oLogs/latest.log","w+"))
  5. local resFile = assert(io.open("/home/compec/winbck/Documents/GITREPO/TPT-Code/oLogs/result.log","w+"))
  6. local clSocket
  7. local iBuffer = ""
  8. local ioBuffer = {}
  9. local player = {}
  10. local state = 0
  11. local function killClient()
  12.     if clSocket then
  13.         clSocket:close()
  14.         clSocket = nil
  15.         iBuffer = nil
  16.         state = 0
  17.     end
  18. end
  19. local function tick()
  20.     while true do
  21.         local cl, err = serv:accept();
  22.         if not cl then
  23.             if err ~= "timeout" then print(err) serv:close() killClient() serv = nil evt.unregister(event.tick, tick) break end break
  24.         end
  25.         if cl then
  26.             killClient()
  27.             clSocket = cl
  28.             clSocket:settimeout(0,"t")
  29.             iBuffer = ""
  30.         end
  31.     end
  32.     if clSocket then
  33.         while true do
  34.             local line, err, partial = clSocket:receive(10000)
  35.             if err and err == "timeout" then
  36.                 iBuffer = iBuffer..partial
  37.             elseif line and not err then
  38.                 iBuffer = iBuffer..line
  39.             end
  40.             if #partial < 10000 then break end
  41.         end
  42.         local i = 1
  43.         while true do
  44.             if i <= #iBuffer then
  45.                 local vInt, _ = rw.readVarInt(iBuffer)
  46.                 table.insert(ioBuffer,iBuffer:sub(i,i+vInt))
  47.                 iBuffer = iBuffer:sub(i+vInt+1)
  48.                 i = i + vInt + 1
  49.             else
  50.                 break
  51.             end
  52.         end
  53.         if ioBuffer[1] then
  54.             local ioPacket = table.remove(ioBuffer,1)
  55.             local translatedPacket = {}
  56.             local tempVar, tempBuf = rw.readVarInt(ioPacket)
  57.             ioPacket = tempBuf; translatedPacket.len = tempVar
  58.             tempVar, tempBuf = rw.readVarInt(ioPacket)
  59.             if tempVar < 0xFF then
  60.                 translatedPacket.data = tempBuf; translatedPacket.id = tempVar
  61.             else
  62.                 translatedPacket.data = ioPacket; translatedPacket.id = 0x00
  63.             end
  64.             translatedPacket.validLength = (translatedPacket.len == #ioPacket)
  65.             translatedPacket.dataLen = #ioPacket
  66.             ioPacket = nil; tempVar = nil; tempBuf = nil
  67.             print(js.encode(translatedPacket))
  68.             if translatedPacket.id == 0x00 and translatedPacket.len == 16 then
  69.                 local protVer, newDat = rw.readVarInt(translatedPacket.data); translatedPacket.data = newDat;
  70.                 local tempVar, newDat = rw.readVarInt(translatedPacket.data); translatedPacket.data = newDat:sub(tempVar+2);
  71.                 state, _ = rw.readVarInt(translatedPacket.data)
  72.                 print(state)
  73.                 if state == 1 then
  74.                     local resStr = js.encode({ version = { name = "1.21", protocol = protVer }, players = { max = 67, online = 67 }, description = { text = "You have requested this with protocol version "..protVer.."!" }, enforcesSecureChat = false })
  75.                     resStr = rw.writeVarInt(#resStr)..resStr; resStr = rw.writeVarInt(0x00)..resStr
  76.                     resStr = rw.writeVarInt(#resStr)..resStr -- thats crazy, two things just for length
  77.                     clSocket:send(resStr)
  78.                 end
  79.             elseif translatedPacket.id == 0x00 and state == 2 then
  80.                 local nameLen, newDat = rw.readVarInt(translatedPacket.data); translatedPacket.data = newDat
  81.                 player.name = translatedPacket.data:sub(1,nameLen); translatedPacket.data = translatedPacket.data:sub(1+nameLen)
  82.                 player.uuid = rw.toHex(translatedPacket.data)
  83.                 local resStr = rw.toStr(player.uuid); resStr = rw.writeVarInt(#player.name,resStr)..player.name
  84.                 resStr = rw.writeVarInt(0,resStr)
  85.                 resStr = rw.writeVarInt(0x02)..resStr -- assign packet id
  86.                 resStr = rw.writeVarInt(#resStr)..resStr -- assign packet length
  87.                 clSocket:send(resStr) -- send that shit!
  88.             elseif translatedPacket.id == 0x01 then
  89.                 local strVal = ""
  90.                 strVal = strVal..rw.writeVarInt(translatedPacket.len)
  91.                 strVal = strVal..rw.writeVarInt(translatedPacket.id)
  92.                 strVal = strVal..translatedPacket.data
  93.                 clSocket:send(strVal)
  94.             end
  95.         end
  96.     end
  97. end
  98. evt.register(evt.tick,tick)
  99. evt.register(evt.close,function()
  100.     if serv then
  101.         serv:close()
  102.         killClient()
  103.         serv = nil
  104.     end
  105.     oFile:close()
  106.     resFile:close()
  107. end)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement