Skip to content

Commit 143303d

Browse files
committed
webmc
1 parent 871e0c4 commit 143303d

File tree

7 files changed

+214
-336
lines changed

7 files changed

+214
-336
lines changed

src/coffee/server/gitignore.coffee

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/coffee/server/mcserver.coffee

Lines changed: 0 additions & 25 deletions
This file was deleted.

src/coffee/server/start.coffee

Lines changed: 35 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -1,172 +1,65 @@
1-
fs=require "fs"
2-
opn=require "opn"
3-
http=require "http"
4-
server=http.createServer()
5-
io=require("socket.io")(server)
6-
express=require 'express'
7-
app=express();
8-
term=require( 'terminal-kit' ).terminal
1+
webmc=require "./webmc"
92
mineflayer = require 'mineflayer'
103
Chunk = require('prismarine-chunk')("1.16.1")
114
vec3=require "vec3"
12-
exec=(cmd)->
13-
exec = require('child_process').exec;
14-
return new Promise (resolve, reject) ->
15-
exec cmd, (error, stdout, stderr) ->
16-
if error
17-
console.warn error
18-
resolve stdout ? stdout : stderr
19-
return
20-
return
21-
22-
config=JSON.parse fs.readFileSync(__dirname+"/config.json")
23-
24-
port=config["express-port"]
25-
26-
app.use express.static(__dirname + "/../client/")
27-
app.use (req, res, next) ->
28-
res.set 'Cache-Control', 'no-store'
29-
next()
30-
app.get "/websocket/",(req,res)->
31-
res.send String(config["websocket-port"])
32-
app.get "/host/",(req,res)->
33-
res.send String(config["host"])
34-
app.listen port
5+
fs=require "fs"
356

367
world={}
8+
379
saveWorld=->
3810
fs.writeFileSync __dirname+"/savedWorld.json",JSON.stringify(world)
3911
restoreWorld=->
4012
world=JSON.parse fs.readFileSync(__dirname+'/savedWorld.json')
13+
4114
restoreWorld()
4215
players={}
4316
socketInfo={}
4417

45-
io.sockets.on "connection", (socket)->
46-
socket.emit "firstLoad",world
47-
socket.on "initClient",(data)->
48-
socketInfo[socket.id]=data
49-
dolaczGracza socket.id
50-
socket.on "playerUpdate",(data)->
51-
players[socket.id]=data
52-
io.sockets.emit "playerUpdate",players
53-
socket.on "blockUpdate",(block)->
54-
world["#{block[0]}:#{block[1]}:#{block[2]}"]=block[3]
55-
if block[3] is 0
56-
delete world["#{block[0]}:#{block[1]}:#{block[2]}"]
57-
io.sockets.emit "blockUpdate",block
58-
saveWorld()
59-
socket.on "disconnect", ->
60-
odlaczGracza socket.id
61-
delete players[socket.id]
62-
delete socketInfo[socket.id]
63-
server.listen config["websocket-port"]
18+
webmc.on "blockUpdate", (x,y,z,v)->
19+
world["#{x}:#{y}:#{z}"]=v
20+
if v is 0
21+
delete world["#{x}:#{y}:#{z}"]
22+
webmc.broadcast "blockUpdate",[x,y,z,v]
23+
saveWorld()
6424

25+
webmc.on "join", (socketid,data)->
26+
console.log "NEW: "+socketid
27+
webmc.send socketid, "mapChunk",123
28+
#init socketInfo
29+
socketInfo[socketid]=data
6530

66-
67-
term.windowTitle "web-minecraft console"
68-
term.clear()
69-
term.green (fs.readFileSync(__dirname+'/asciiLogo'))
70-
71-
log=(message)->
72-
term("\n#{message}\n")
73-
return
74-
stop=->
75-
term.brightGreen "\nServer stopped!\n"
76-
process.exit()
77-
return
78-
help=->
79-
term.brightGreen("\n
80-
help\t- pomoc\n
81-
stop\t- zatrzymanie serwera\n
82-
open\t- uruchomienie przeglądarki pod adresem serwera\n
83-
copen\t- uruchamianie gry w przeglądarce chrome w wersji 'app'\n
84-
list\t- wypisuje wszystkich aktywnych użytkowników\n
85-
clear\t- czyści consolę\n
86-
info\t- wypisuje informacje o serwerze\n
87-
")
88-
return
89-
info=->
90-
term "\n"
91-
term.table [
92-
[ "Typ serwera" , "Adres serwera" ] ,
93-
[ "Serwer websocket" , "#{config.host}:#{config["websocket-port"]}" ] ,
94-
[ "Serwer express" , "#{config.host}:#{config["express-port"]}" ] ,
95-
[ "Serwer minecraftowy" , "#{config.realServer.ip}:#{config.realServer.port}" ] ,
96-
] , {
97-
hasBorder: true ,
98-
contentHasMarkup: true ,
99-
borderChars: 'lightRounded' ,
100-
borderAttr: { color: 'blue' } ,
101-
textAttr: { bgColor: 'default' } ,
102-
firstRowTextAttr: { bgColor: 'blue' } ,
103-
width: 60 ,
104-
fit: true
105-
}
106-
return
107-
com=(command)->
108-
if command is "stop"
109-
stop()
110-
else if command is "help" or command is "?"
111-
help()
112-
else if command is "clear"
113-
term.clear()
114-
else if command is "list"
115-
Object.keys(socketInfo).forEach (p)->
116-
term "\n#{p} (#{socketInfo[p].nick})"
117-
else if command is "open"
118-
opn "http://#{config["host"]}:#{config["express-port"]}"
119-
else if command is "copen"
120-
exec "google-chrome --app=http://#{config["host"]}:#{config["express-port"]}"
121-
else if command is "info"
122-
info()
123-
else if command isnt ""
124-
term.red "\nNieznana komenda. Użyj 'help' lub '?' aby uzyskać pomoc."
125-
incon()
126-
return
127-
incon=->
128-
term.green "\nserver> "
129-
term.inputField {
130-
autoComplete: [
131-
'help' ,
132-
'stop' ,
133-
'?',
134-
'open',
135-
'clear',
136-
'info',
137-
'list',
138-
'copen'
139-
] ,
140-
autoCompleteHint: true ,
141-
autoCompleteMenu: true
142-
},( er , input )->
143-
com input
144-
return
145-
term.on 'key' , ( name , matches , data )->
146-
if name is 'CTRL_C'
147-
stop()
148-
return
149-
info()
150-
incon()
151-
dolaczGracza=(socketid)->
31+
#socketInfo add Bot
15232
socketInfo[socketid].bot=mineflayer.createBot {
153-
host: config.realServer.ip
154-
port: config.realServer.port
33+
host: webmc.config.realServer.ip
34+
port: webmc.config.realServer.port
15535
username: socketInfo[socketid].nick
15636
}
157-
37+
15838
socketInfo[socketid].bot._client.on "map_chunk",(packet)->
15939
cell=new Chunk()
16040
cell.load packet.chunkData,packet.bitMap,true,false
161-
io.to(socketid).emit "mapChunk", cell.sections
41+
webmc.send socketid,"mapChunk", cell.sections
16242
return
163-
16443
socketInfo[socketid].bot.on 'chat',(username, message)->
16544
if username is socketInfo[socketid].bot.username
16645
return
16746
socketInfo[socketid].bot.chat message
16847
return
48+
#first world load
49+
webmc.send socketid,"firstLoad",world
50+
51+
16952
return
170-
odlaczGracza=(socketid)->
53+
webmc.on "leave", (socketid)->
54+
console.log "DIS: "+socketid
55+
56+
#end bot session
17157
socketInfo[socketid].bot.end()
58+
#delete socketinfo
59+
delete players[socket.id]
60+
delete socketInfo[socket.id]
61+
17262
return
63+
webmc.on "playerUpdate",(data)->
64+
players[socket.id]=data
65+
webmc.broadcast "playerUpdate", data

src/coffee/server/webmc.coffee

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
2+
fs=require "fs"
3+
http=require "http"
4+
server=http.createServer()
5+
io=require("socket.io")(server)
6+
express=require 'express'
7+
app=express();
8+
9+
sf={}
10+
11+
config=JSON.parse fs.readFileSync(__dirname+"/config.json")
12+
13+
port=config["express-port"]
14+
15+
app.use express.static(__dirname + "/../client/")
16+
app.use (req, res, next) ->
17+
res.set 'Cache-Control', 'no-store'
18+
next()
19+
app.get "/websocket/",(req,res)->
20+
res.send String(config["websocket-port"])
21+
app.get "/host/",(req,res)->
22+
res.send String(config["host"])
23+
app.listen port
24+
25+
server.listen config["websocket-port"]
26+
27+
28+
io.sockets.on "connection", (socket)->
29+
socket.on "initClient",(data)->
30+
try
31+
sf.onjoin socket.id,data
32+
socket.on "playerUpdate",(data)->
33+
try
34+
sf.onplayerUpdate data
35+
socket.on "blockUpdate",(block)->
36+
try
37+
sf.onblockUpdate block...
38+
socket.on "disconnect", ->
39+
try
40+
sf.onleave socket.id
41+
module.exports={
42+
on:(type,f)->
43+
if type=="join"
44+
sf.onjoin=f
45+
if type=="leave"
46+
sf.onleave=f
47+
if type=="blockUpdate"
48+
sf.onblockUpdate=f
49+
if type=="playerUpdate"
50+
sf.onplayerUpdate=f
51+
send:(socketid,message,data)->
52+
io.to(socketid).emit message,data
53+
broadcast:(message,data)->
54+
io.sockets.emit message,data
55+
config
56+
}

src/server/savedWorld.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

0 commit comments

Comments
 (0)