1 package main 2 3 import ( 4 "bufio" 5 "io" 6 "strings" 7 ) 8 9 type ServerProperties map[string]string 10 11 var ( 12 defaultMapSettings = ServerProperties{ 13 "allow-flight": "false", 14 "allow-nether": "true", 15 "announce-player-achievements": "true", 16 "difficulty": "1", 17 "enable-command-block": "false", 18 "force-gamemode": "false", 19 "gamemode": "0", 20 "generate-structures": "true", 21 "generator-settings": "", 22 "hardcore": "false", 23 "level-seed": "", 24 "level-type": "DEFAULT", 25 "max-build-height": "256", 26 "max-world-size": "29999984", 27 "motd": "A MineWebGen Server", 28 "player-idle-timeout": "0", 29 "pvp": "true", 30 "resource-pack": "", 31 "resource-pack-hash": "", 32 "spawn-animals": "true", 33 "spawn-monsters": "true", 34 "spawn-npcs": "true", 35 "spawn-protection": "16", 36 "use-native-transport": "true", 37 "view-distance": "10", 38 "grow-trees": "true", 39 } 40 defaultServerSettings = ServerProperties{ 41 "enable-query": "false", 42 "enable-rcon": "false", 43 "max-players": "20", 44 "max-tick-time": "60000", 45 "network-compression-threshold": "256", 46 "online-mode": "true", 47 "op-permission-level": "4", 48 "query.port": "25565", 49 "rcon.password": "", 50 "rcon.port": "25575", 51 "server-ip": "", 52 "server-port": "25565", 53 "snooper-enabled": "false", 54 "white-list": "false", 55 "verify-names": "true", 56 "admin-slot": "false", 57 "public": "true", 58 "server-name": "", 59 "max-connections": "3", 60 } 61 ) 62 63 func DefaultMapSettings() ServerProperties { 64 return defaultMapSettings.Clone() 65 } 66 67 func DefaultServerSettings() ServerProperties { 68 return defaultServerSettings.Clone() 69 } 70 71 func (s ServerProperties) Clone() ServerProperties { 72 m := make(ServerProperties) 73 for k, v := range s { 74 m[k] = v 75 } 76 return m 77 } 78 79 func (s ServerProperties) ReadFrom(r io.Reader) error { 80 br := bufio.NewReader(r) 81 for { 82 l, err := br.ReadString('\n') 83 if err != nil { 84 if err == io.EOF { 85 return nil 86 } 87 return err 88 } 89 if l[0] == '#' { 90 continue 91 } 92 if l[len(l)-1] == '\r' { 93 l = l[:len(l)-1] 94 } 95 parts := strings.SplitN(l, "=", 2) 96 if len(parts) != 2 { 97 continue 98 } 99 s[parts[0]] = parts[1] 100 } 101 } 102 103 func (s ServerProperties) WriteTo(w io.Writer) error { 104 toWrite := make([]byte, 0, 1024) 105 for k, v := range s { 106 toWrite = toWrite[:0] 107 toWrite = append(toWrite, k...) 108 toWrite = append(toWrite, '=') 109 toWrite = append(toWrite, v...) 110 toWrite = append(toWrite, '\n') 111 _, err := w.Write(toWrite) 112 if err != nil { 113 return err 114 } 115 } 116 return nil 117 }