Allow using .zips for texture packs, also allow changing cloud height for clients that support EnvMapAppearance v2.

This commit is contained in:
UnknownShadow200 2016-01-16 18:45:57 +11:00
parent bea624ac48
commit eb8b8a37cc
12 changed files with 241 additions and 193 deletions

View File

@ -54,10 +54,10 @@ namespace MCGalaxy.Commands {
Player.SendMessage(p, "No backups for this map exist yet.");
}
if (lvl.textureUrl != "") {
Player.SendMessage(p, "TexturePack: %b" + lvl.textureUrl);
} else if (lvl == Server.mainLevel && Server.defaultTextureUrl != "") {
Player.SendMessage(p, "TexturePack: " + Server.defaultTextureUrl);
if (lvl.terrainUrl != "") {
Player.SendMessage(p, "TexturePack: %b" + lvl.terrainUrl);
} else if (lvl == Server.mainLevel && Server.defaultTerrainUrl != "") {
Player.SendMessage(p, "TexturePack: " + Server.defaultTerrainUrl);
} else {
Player.SendMessage(p, "No textures for this map exist yet.");
}

View File

@ -29,11 +29,11 @@ namespace MCGalaxy.Commands {
public CmdEnvironment() { }
public override void Use(Player p, string message) {
message = message.ToLower();
if (message == "l preset" || message == "level preset") {
SendPresetsMessage(p);
return;
}
message = message.ToLower();
if (message == "l preset" || message == "level preset") {
SendPresetsMessage(p);
return;
}
string[] args = null;
if (message == "" || (args = message.Split(' ')).Length < 3) {
Help(p); return;
@ -55,61 +55,57 @@ namespace MCGalaxy.Commands {
void Handle(Player p, string group, string variable, string value) {
bool level = group == "l";
Level lvl = p.level;
switch (variable) {
case "fog":
SetEnvColour(p, value, 2, "fog", ref p.level.FogColor, level);
break;
SetEnvColour(p, value, 2, "fog", ref lvl.FogColor, level); break;
case "cloud":
case "clouds":
SetEnvColour(p, value, 1, "cloud", ref p.level.CloudColor, level);
break;
SetEnvColour(p, value, 1, "cloud", ref lvl.CloudColor, level); break;
case "sky":
SetEnvColour(p, value, 0, "sky", ref p.level.SkyColor, level);
break;
SetEnvColour(p, value, 0, "sky", ref lvl.SkyColor, level); break;
case "dark":
case "shadow":
SetEnvColour(p, value, 3, "shadow", ref p.level.ShadowColor, level);
break;
SetEnvColour(p, value, 3, "shadow", ref lvl.ShadowColor, level); break;
case "sun":
case "light":
case "sunlight":
SetEnvColour(p, value, 4, "sunlight", ref p.level.LightColor, level);
break;
SetEnvColour(p, value, 4, "sunlight", ref lvl.LightColor, level); break;
case "weather":
SetEnvWeather(p, value, ref p.level.weather, level);
break;
SetEnvWeather(p, value, ref lvl.weather, level); break;
case "cloudsheight":
case "cloudheight":
if (!level) {
p.SendMessage("This feature is not available for 'player' target"); return;
}
SetEnvMapAppearanceS(p, value, "clouds height", (short)(lvl.height + 2), ref lvl.CloudsHeight); break;
case "waterlevel":
case "edgelevel":
case "level":
if (!level) {
p.SendMessage("This feature is not available for 'player' target");
return;
p.SendMessage("This feature is not available for 'player' target"); return;
}
byte ignored = 0;
SetEnvMapAppearance(p, value, "water level", false, 0, ref ignored );
break;
SetEnvMapAppearanceS(p, value, "water level", (short)(lvl.height / 2), ref lvl.EdgeLevel); break;
case "horizon":
case "edge":
case "water":
if (!level) {
p.SendMessage("This feature is not available for 'player' target"); return;
}
SetEnvMapAppearance(p, value, "edge block", true, Block.waterstill, ref p.level.HorizonBlock);
break;
SetEnvMapAppearance(p, value, "edge block", Block.waterstill, ref lvl.HorizonBlock); break;
case "side":
case "border":
case "bedrock":
if (!level) {
p.SendMessage("This feature is not available for 'player' target"); return;
}
SetEnvMapAppearance(p, value, "sides block", true, Block.blackrock, ref p.level.EdgeBlock);
break;
SetEnvMapAppearance(p, value, "sides block", Block.blackrock, ref lvl.EdgeBlock); break;
case "preset":
if (!SetPreset(p, value, level))
return;
if (!SetPreset(p, value, level)) return;
break;
default:
Help(p);
return;
Help(p); return;
}
if (level)
@ -178,12 +174,11 @@ namespace MCGalaxy.Commands {
}
if (weather > 2) {
p.SendMessage("Please use a valid integer (0,1,2) or string (sun,rain,snow)");
return;
p.SendMessage("Please use a valid integer (0,1,2) or string (sun,rain,snow)"); return;
}
}
if( level )
if (level)
p.level.weather = weather;
string weatherType = weather == 0 ? "&sSun" : (weather == 1 ? "&1Rain" : "&fSnow");
p.SendMessage(string.Format("&aSet weather for {0}&a to {1} ({2}&a)", target, weather, weatherType));
@ -191,33 +186,39 @@ namespace MCGalaxy.Commands {
// Send the changed colour to all players affected by the command.
if (level) {
foreach (Player pl in Player.players) {
if (pl.level == p.level && pl.HasCpeExt(CpeExt.EnvWeatherType)) {
if (pl.level == p.level && pl.HasCpeExt(CpeExt.EnvWeatherType))
pl.SendSetMapWeather(weather);
}
}
} else if (p.HasCpeExt(CpeExt.EnvWeatherType)) {
p.SendSetMapWeather(weather);
}
}
void SetEnvMapAppearance(Player p, string value, string variable,
bool block, byte defValue, ref byte modifyBlock) {
void SetEnvMapAppearance(Player p, string value, string variable, byte defValue, ref byte target) {
if (IsResetString(value)) {
p.SendMessage(string.Format("Reset {0} for {0}&S to normal", variable, p.level.name));
if( block )
modifyBlock = defValue;
else
p.level.EdgeLevel = (short)(p.level.Height / 2);
target = defValue;
} else {
if (block && !CheckBlock(p, value, variable, ref modifyBlock))
return;
if( !block && !CheckShort(p, value, variable, ref p.level.EdgeLevel))
return;
if (!CheckBlock(p, value, variable, ref target)) return;
}
SendCurrentMapAppearance(p.level);
}
void SetEnvMapAppearanceS(Player p, string value, string variable, short defValue, ref short target) {
if (IsResetString(value)) {
p.SendMessage(string.Format("Reset {0} for {0}&S to normal", variable, p.level.name));
target = defValue;
} else {
if (!CheckShort(p, value, variable, ref target)) return;
}
SendCurrentMapAppearance(p.level);
}
void SendCurrentMapAppearance(Level lvl) {
foreach (Player pl in Player.players) {
if (pl.HasCpeExt(CpeExt.EnvMapAppearance) && pl.level == p.level)
pl.SendCurrentMapAppearance();
bool hasExt = pl.HasCpeExt(CpeExt.EnvMapAppearance) || pl.HasCpeExt(CpeExt.EnvMapAppearance, 2);
if (hasExt && pl.level == lvl)
pl.SendCurrentMapAppearance();
}
}
@ -292,7 +293,7 @@ namespace MCGalaxy.Commands {
}
return true;
} else {
SendPresetsMessage(p);
SendPresetsMessage(p);
return false;
}
}
@ -328,16 +329,16 @@ namespace MCGalaxy.Commands {
}
static void SendPresetsMessage(Player p) {
p.SendMessage("/env l preset [type] -- Uses an env preset on your map");
p.SendMessage("/env l preset [type] -- Uses an env preset on your map");
p.SendMessage("Valid types: Cartoon/Midnight/Midnight2/Noir/Normal/Trippy/Watery/Sunset/Gloomy/Cloudy");
}
public override void Help(Player p) {
p.SendMessage("%T/env [target] [variable] [value]");
p.SendMessage("%H Valid targets: player or p, level or l");
p.SendMessage("%H Valid variables: fog, cloud, sky, sun, shadow, weather");
p.SendMessage("%H level only variables: level, horizon, border, preset");
p.SendMessage("%HUsing 'normal' as a value will reset the variable");
Player.SendMessage(p, "%T/env [target] [variable] [value]");
Player.SendMessage(p, "%H Valid targets: player or p, level or l");
Player.SendMessage(p, "%H Valid variables: fog, cloud, sky, sun, shadow, weather");
Player.SendMessage(p, "%H level only: level, cloudsheight, horizon, border, preset");
Player.SendMessage(p, "%HUsing 'normal' as a value will reset the variable");
}
}
}

View File

@ -0,0 +1,97 @@
/*
Copyright 2011 MCGalaxy
Dual-licensed under the Educational Community License, Version 2.0 and
the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses.
*/
namespace MCGalaxy.Commands {
public sealed class CmdTexture : Command {
public override string name { get { return "texture"; } }
public override string shortcut { get { return ""; } }
public override string type { get { return CommandTypes.Other; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public CmdTexture() { }
public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
string[] args = message.Split(' ');
if (args.Length != 2) { Help(p); return; }
string scope = args[0].ToLower();
string url = args[1];
if (url.ToLower() == "normal" || url.ToLower() == "reset") {
url = "";
} else if (!(url.StartsWith("http://") || url.StartsWith("https://"))) {
p.SendMessage("Please use http:// or https:// in front of your URL"); return;
}
if ((scope == "global" || scope == "level") && !url.EndsWith(".png")) {
p.SendMessage("The terrain URL must end in a .png"); return;
}
if ((scope == "globalzip" || scope == "levelzip") && !url.EndsWith(".zip")) {
p.SendMessage("The texture pack URL must end in a .zip"); return;
}
if (scope == "global") {
Server.defaultTerrainUrl = url;
p.SendMessage("Set server's default terrain to " + args[1]);
UpdateGlobally(p, false);
} else if (scope == "level") {
p.level.terrainUrl = url;
p.SendMessage("Set level's terrain to " + args[1]);
UpdateLevel(p, false);
} else if (scope == "globalzip") {
Server.defaultTexturePackUrl = url;
p.SendMessage("Set server's default texture pack to " + args[1]);
UpdateGlobally(p, true);
} else if (scope == "levelzip") {
p.level.texturePackUrl = url;
p.SendMessage("Set level's texture pack to " + args[1]);
UpdateLevel(p, true);
}
}
void UpdateGlobally(Player p, bool zip) {
foreach (Player pl in Player.players) {
bool hasExt = pl.HasCpeExt(CpeExt.EnvMapAppearance) || pl.HasCpeExt(CpeExt.EnvMapAppearance, 2);
string url = zip ? pl.level.texturePackUrl : pl.level.terrainUrl;
if (hasExt && url == "")
pl.SendCurrentMapAppearance();
}
SrvProperties.Save("properties/server.properties");
}
void UpdateLevel(Player p, bool zip) {
foreach (Player pl in Player.players) {
bool hasExt = pl.HasCpeExt(CpeExt.EnvMapAppearance) || pl.HasCpeExt(CpeExt.EnvMapAppearance, 2);
if (hasExt && pl.level == p.level)
pl.SendCurrentMapAppearance();
}
p.level.Save();
Level.SaveSettings(p.level);
}
public override void Help(Player p) {
Player.SendMessage(p, "%T/texture [scope] [url]");
Player.SendMessage(p, "%H global/globalzip scope: Changes server's default texture.");
Player.SendMessage(p, "%H level/levelzip scope: Changes current level's texture.");
Player.SendMessage(p, "%HUsing 'reset' as a url will reset the texture to default.");
Player.SendMessage(p, "%HNote: zip texture packs are not supported by all clients.");
}
}
}

View File

@ -1,77 +0,0 @@
/*
Copyright 2011 MCGalaxy
Dual-licensed under the Educational Community License, Version 2.0 and
the GNU General Public License, Version 3 (the "Licenses"); you may
not use this file except in compliance with the Licenses. You may
obtain a copy of the Licenses at
http://www.opensource.org/licenses/ecl2.php
http://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing,
software distributed under the Licenses are distributed on an "AS IS"
BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
or implied. See the Licenses for the specific language governing
permissions and limitations under the Licenses.
*/
namespace MCGalaxy.Commands {
public sealed class CmdTexture : Command {
public override string name { get { return "texture"; } }
public override string shortcut { get { return ""; } }
public override string type { get { return CommandTypes.Other; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public CmdTexture() { }
public override void Use(Player p, string message) {
if (message == "") { Help(p); return; }
string[] args = message.Split(' ');
if (args.Length != 2) { Help(p); return; }
string scope = args[0].ToLower();
string url = args[1];
if (url.ToLower() == "normal" || url.ToLower() == "reset") {
url = "";
} else {
if (!url.StartsWith("http://") && !args[1].StartsWith("https://")) {
p.SendMessage("Please use http:// or https:// in front of your URL"); return;
}
if (!url.EndsWith(".png")) {
p.SendMessage("Please make sure your URL ends in .png"); return;
}
}
if (scope == "global") {
Server.defaultTextureUrl = url;
p.SendMessage("Set server's default texture to " + args[1]);
foreach (Player pl in Player.players) {
if (pl.HasCpeExt(CpeExt.EnvMapAppearance) && pl.level.textureUrl == "") {
pl.SendSetMapAppearance(Server.defaultTextureUrl, p.level.EdgeBlock, p.level.HorizonBlock, p.level.EdgeLevel);
}
}
SrvProperties.Save("properties/server.properties");
} else if (scope == "level") {
p.level.textureUrl = url;
p.SendMessage("Set level's texture to " + args[1]);
foreach (Player pl in Player.players) {
if (pl.HasCpeExt(CpeExt.EnvMapAppearance) && pl.level == p.level) {
pl.SendSetMapAppearance(p.level.textureUrl, p.level.EdgeBlock, p.level.HorizonBlock, p.level.EdgeLevel);
}
}
p.level.Save();
Level.SaveSettings(p.level);
}
}
public override void Help(Player p) {
p.SendMessage("/texture global [texture url] - Changes the server default texture");
p.SendMessage("/texture level [texture url] - Changes current level's texture");
p.SendMessage("Using 'reset' for the texture url will reset the texture to default.");
}
}
}

View File

@ -74,7 +74,8 @@ namespace MCGalaxy.Levels.IO {
writer.WriteLine("RandomFlow = " + level.randomFlow);
writer.WriteLine("GrowTrees = " + level.growTrees);
writer.WriteLine("Weather = " + level.weather);
writer.WriteLine("Texture = " + level.textureUrl);
writer.WriteLine("Texture = " + level.terrainUrl);
writer.WriteLine("TexturePack = " + level.texturePackUrl);
}
static string GetName(LevelPermission perm) {
@ -96,6 +97,7 @@ namespace MCGalaxy.Levels.IO {
writer.WriteLine("FogColor = " + level.FogColor);
writer.WriteLine("EdgeLevel = " + level.EdgeLevel);
writer.WriteLine("CloudsHeight = " + level.CloudsHeight);
writer.WriteLine("EdgeBlock = " + level.EdgeBlock);
writer.WriteLine("HorizonBlock = " + level.HorizonBlock);
}
@ -137,6 +139,7 @@ namespace MCGalaxy.Levels.IO {
case "lightcolor": level.LightColor = value; break;
case "edgeblock": level.EdgeBlock = byte.Parse(value); break;
case "edgelevel": level.EdgeLevel = short.Parse(value); break;
case "cloudsheight": level.CloudsHeight = short.Parse(value); break;
case "horizonblock": level.HorizonBlock = byte.Parse(value); break;
}
} catch {
@ -200,7 +203,9 @@ namespace MCGalaxy.Levels.IO {
case "weather":
level.weather = byte.Parse(value); break;
case "texture":
level.textureUrl = value; break;
level.terrainUrl = value; break;
case "texturepack":
level.texturePackUrl = value; break;
case "buildable":
level.Buildable = bool.Parse(value); break;
case "deletable":

View File

@ -96,7 +96,7 @@ namespace MCGalaxy
public bool Buildable = true, Deletable = true;
public byte weather;
public string textureUrl = "";
public string terrainUrl = "", texturePackUrl = "";
public bool cancelsave1;
public bool cancelunload;
@ -141,6 +141,8 @@ namespace MCGalaxy
/// <summary> Elevation of the "ocean" that surrounds maps. Set to -1 to use client default (halfway up the map). </summary>
public short EdgeLevel = -1;
public short CloudsHeight = -1;
/// <summary> The block which will be displayed on the horizon. </summary>
public byte HorizonBlock = Block.water;
@ -213,6 +215,7 @@ namespace MCGalaxy
Length = 16;
name = n;
CloudsHeight = (short)(y + 2);
blocks = new byte[Width * Height * Length];
ChunksX = (Width + 15) >> 4;
ChunksY = (Height + 15) >> 4;

View File

@ -375,7 +375,6 @@
<Compile Include="Commands\Other\CmdTake.cs" />
<Compile Include="Commands\Other\CmdTColor.cs" />
<Compile Include="Commands\Other\CmdText.cs" />
<Compile Include="Commands\Other\CmdTexture.cs" />
<Compile Include="Commands\Other\CmdTimer.cs" />
<Compile Include="Commands\Other\CmdTitle.cs" />
<Compile Include="Commands\Other\CmdTnt.cs" />
@ -413,6 +412,7 @@
<Compile Include="Commands\World\CmdRestore.cs" />
<Compile Include="Commands\World\CmdSave.cs" />
<Compile Include="Commands\World\CmdSetspawn.cs" />
<Compile Include="Commands\World\CmdTexture.cs" />
<Compile Include="Commands\World\CmdUnflood.cs" />
<Compile Include="Commands\World\CmdUnload.cs" />
<Compile Include="Commands\World\CmdUnlock.cs" />

View File

@ -82,6 +82,11 @@ namespace MCGalaxy {
void HandleExtInfo( byte[] message ) {
appName = enc.GetString( message, 0, 64 ).Trim();
extensionCount = message[65];
// NOTE: Workaround as ClassiCube violates the CPE specification here.
// If server sends version 2, the client should reply with version 1.
// Except ClassiCube just doesn't reply at all if server sends version 2.
if (appName == "ClassiCube Client")
EnvMapAppearance = 1;
}
void HandleExtEntry( byte[] message ) {
@ -384,7 +389,7 @@ namespace MCGalaxy {
SendSetMapWeather(level.weather);
if (HasCpeExt(CpeExt.EnvColors))
SendCurrentEnvColors();
if (HasCpeExt(CpeExt.EnvMapAppearance))
if (HasCpeExt(CpeExt.EnvMapAppearance) || HasCpeExt(CpeExt.EnvMapAppearance, 2))
SendCurrentMapAppearance();
if ( OnSendMap != null )
OnSendMap(this, buffer);
@ -636,12 +641,25 @@ namespace MCGalaxy {
byte[] buffer = new byte[69];
buffer[0] = Opcode.CpeEnvSetMapApperance;
NetUtils.WriteAscii(url, buffer, 1);
Server.s.Log(url + "," + ((char)buffer[1]));
buffer[65] = sideblock;
buffer[66] = edgeblock;
NetUtils.WriteI16(sidelevel, buffer, 67);
SendRaw(buffer);
}
public void SendSetMapAppearanceV2( string url, byte sideblock, byte edgeblock, short sidelevel, short cloudHeight) {
byte[] buffer = new byte[73];
buffer[0] = Opcode.CpeEnvSetMapApperance;
NetUtils.WriteAscii(url, buffer, 1);
buffer[65] = sideblock;
buffer[66] = edgeblock;
NetUtils.WriteI16(sidelevel, buffer, 67);
NetUtils.WriteI16(cloudHeight, buffer, 69);
// TODO: allow changing max view distance
SendRaw(buffer);
}
public void SendSetMapWeather( byte weather ) { // 0 - sunny; 1 - raining; 2 - snowing
SendRaw(Opcode.CpeEnvWeatherType, weather);
}

View File

@ -106,7 +106,6 @@ namespace MCGalaxy
}
break;*/
case CpeExt.EnvColors:
SendCurrentEnvColors();
EnvColors = version; break;
case CpeExt.SelectionCuboid:
SelectionCuboid = version; break;
@ -116,10 +115,8 @@ namespace MCGalaxy
UpdateModels();
ChangeModel = version; break;
case CpeExt.EnvMapAppearance:
SendCurrentMapAppearance();
EnvMapAppearance = version; break;
case CpeExt.EnvWeatherType:
SendSetMapWeather(level.weather);
EnvWeatherType = version; break;
case CpeExt.HackControl:
HackControl = version; break;
@ -180,8 +177,15 @@ namespace MCGalaxy
}
public void SendCurrentMapAppearance() {
string url = level.textureUrl == "" ? Server.defaultTextureUrl : level.textureUrl;
SendSetMapAppearance(url, level.EdgeBlock, level.HorizonBlock, level.EdgeLevel);
if (EnvMapAppearance == 2) {
string url = level.texturePackUrl == "" ? level.terrainUrl : level.texturePackUrl;
if (url == "")
url = Server.defaultTexturePackUrl == "" ? Server.defaultTerrainUrl : Server.defaultTexturePackUrl;
SendSetMapAppearanceV2(url, level.EdgeBlock, level.HorizonBlock, level.EdgeLevel, level.CloudsHeight);
} else {
string url = level.terrainUrl == "" ? Server.defaultTerrainUrl : level.terrainUrl;
SendSetMapAppearance(url, level.EdgeBlock, level.HorizonBlock, level.EdgeLevel);
}
}
public void SendCurrentEnvColors() {
@ -202,21 +206,21 @@ namespace MCGalaxy
}
public void SendCurrentBlockPermissions() {
byte count = hasCustomBlocks ? Block.CpeCount : Block.OriginalCount;
for (byte i = 0; i < count; i++) {
bool canPlace = Block.canPlace(this, i);
bool canDelete = canPlace;
if (!level.Buildable) canPlace = false;
if (!level.Deletable) canDelete = false;
SendSetBlockPermission(i, canPlace, canDelete);
}
if (!HasCpeExt(CpeExt.BlockDefinitions)) return;
for (int i = count; i < 256; i++) {
if (BlockDefinition.GlobalDefinitions[i] == null) continue;
SendSetBlockPermission((byte)i, level.Buildable, level.Deletable);
}
byte count = hasCustomBlocks ? Block.CpeCount : Block.OriginalCount;
for (byte i = 0; i < count; i++) {
bool canPlace = Block.canPlace(this, i);
bool canDelete = canPlace;
if (!level.Buildable) canPlace = false;
if (!level.Deletable) canDelete = false;
SendSetBlockPermission(i, canPlace, canDelete);
}
if (!HasCpeExt(CpeExt.BlockDefinitions)) return;
for (int i = count; i < 256; i++) {
if (BlockDefinition.GlobalDefinitions[i] == null) continue;
SendSetBlockPermission((byte)i, level.Buildable, level.Deletable);
}
}
}

View File

@ -680,7 +680,7 @@ namespace MCGalaxy {
SendExtEntry(CpeExt.BlockPermissions, 1);
SendExtEntry(CpeExt.ChangeModel, 1);
SendExtEntry(CpeExt.EnvMapAppearance, 1);
SendExtEntry(CpeExt.EnvMapAppearance, 2);
SendExtEntry(CpeExt.EnvWeatherType, 1);
SendExtEntry(CpeExt.HackControl, 1);

View File

@ -88,16 +88,16 @@ namespace MCGalaxy {
catch { Server.s.Log("port invalid! setting to default."); }
break;
case "verify-names":
Server.verify = ( value.ToLower() == "true" ) ? true : false;
Server.verify = value.ToLower() == "true";
break;
case "public":
Server.pub = ( value.ToLower() == "true" ) ? true : false;
Server.pub = value.ToLower() == "true";
break;
case "world-chat":
Server.worldChat = ( value.ToLower() == "true" ) ? true : false;
Server.worldChat = value.ToLower() == "true";
break;
//case "guest-goto":
// Server.guestGoto = (value.ToLower() == "true") ? true : false;
// Server.guestGoto = value.ToLower() == "true";
// break;
case "max-players":
try {
@ -140,10 +140,10 @@ namespace MCGalaxy {
}
break;
case "irc":
Server.irc = ( value.ToLower() == "true" ) ? true : false;
Server.irc = value.ToLower() == "true";
break;
case "irc-colorsenable":
Server.ircColorsEnable = ( value.ToLower() == "true" ) ? true : false;
Server.ircColorsEnable = value.ToLower() == "true";
break;
case "irc-server":
Server.ircServer = value;
@ -188,7 +188,7 @@ namespace MCGalaxy {
case "report-back":
Server.reportBack = ( value.ToLower() == "true" ) ? true : false;
Server.reportBack = value.ToLower() == "true";
break;
case "backup-time":
if ( Convert.ToInt32(value) > 1 ) { Server.backupInterval = Convert.ToInt32(value); }
@ -197,20 +197,14 @@ namespace MCGalaxy {
if ( !value.Contains("System.Windows.Forms.TextBox, Text:") )
Server.backupLocation = value;
break;
//case "console-only": // Never used
// Server.console = (value.ToLower() == "true") ? true : false;
// break;
case "physicsrestart":
Server.physicsRestart = ( value.ToLower() == "true" ) ? true : false;
Server.physicsRestart = value.ToLower() == "true";
break;
case "deathcount":
Server.deathcount = ( value.ToLower() == "true" ) ? true : false;
Server.deathcount = value.ToLower() == "true";
break;
case "usemysql":
Server.useMySQL = ( value.ToLower() == "true" ) ? true : false;
Server.useMySQL = value.ToLower() == "true";
break;
case "host":
Server.MySQLHost = value;
@ -354,13 +348,13 @@ namespace MCGalaxy {
catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
break;
case "auto-update":
Server.autoupdate = ( value.ToLower() == "true" ) ? true : false;
Server.autoupdate = value.ToLower() == "true";
break;
case "use-beta-version":
Server.DownloadBeta = (value.ToLower() == "true") ? true : false;
Server.DownloadBeta = value.ToLower() == "true";
break;
case "in-game-update-notify":
Server.notifyPlayers = ( value.ToLower() == "true" ) ? true : false;
Server.notifyPlayers = value.ToLower() == "true";
break;
case "update-countdown":
try { Server.restartcountdown = Convert.ToInt32(value).ToString(); }
@ -383,13 +377,13 @@ namespace MCGalaxy {
catch { Server.s.Log("Invalid " + key + ". Using default."); break; }
break;
case "use-whitelist":
Server.useWhitelist = ( value.ToLower() == "true" ) ? true : false;
Server.useWhitelist = value.ToLower() == "true";
break;
case "premium-only":
Server.PremiumPlayersOnly = ( value.ToLower() == "true" ) ? true : false;
Server.PremiumPlayersOnly = value.ToLower() == "true";
break;
case "allow-tp-to-higher-ranks":
Server.higherranktp = ( value.ToLower() == "true" ) ? true : false;
Server.higherranktp = value.ToLower() == "true";
break;
case "agree-to-rules-on-entry":
try { Server.agreetorulesonentry = bool.Parse(value); }
@ -405,13 +399,15 @@ namespace MCGalaxy {
break;
case "default-texture-url":
if (!value.StartsWith("http://") && !value.StartsWith("https://"))
{
Server.defaultTextureUrl = "";
}
Server.defaultTerrainUrl = "";
else
{
Server.defaultTextureUrl = value;
}
Server.defaultTerrainUrl = value;
break;
case "default-texture-pack-url":
if (!value.StartsWith("http://") && !value.StartsWith("https://"))
Server.defaultTexturePackUrl = "";
else
Server.defaultTexturePackUrl = value;
break;
case "dollar-before-dollar":
try { Server.dollardollardollar = bool.Parse(value); }
@ -772,7 +768,8 @@ namespace MCGalaxy {
w.WriteLine("restart-on-error = " + Server.restartOnError);
w.WriteLine("menu-style = " + Server.menustyle.ToString());
w.WriteLine("main-name = " + Server.level);
w.WriteLine("default-texture-url = " + Server.defaultTextureUrl);
w.WriteLine("default-texture-url = " + Server.defaultTerrainUrl);
w.WriteLine("default-texture-pack-url = " + Server.defaultTexturePackUrl);
//w.WriteLine("guest-goto = " + Server.guestGoto);
w.WriteLine();
w.WriteLine("# irc bot options");

View File

@ -353,7 +353,7 @@ namespace MCGalaxy
public static bool guestLimitNotify = false;
public static bool guestJoinNotify = true;
public static bool guestLeaveNotify = true;
public static string defaultTextureUrl = "";
public static string defaultTerrainUrl = "", defaultTexturePackUrl = "";
public static bool flipHead = false;