Use Server.zombie.Running instead of ZombieModeOn, also fix joining a zombie level (not from transferring from the previous level) did not show a join messsage.

This commit is contained in:
UnknownShadow200 2016-03-28 11:54:08 +11:00
parent daa003db1e
commit c253a84bf7
26 changed files with 83 additions and 71 deletions

View File

@ -27,7 +27,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override bool Enabled { get { return Server.ZombieModeOn || Server.lava.active; } }
public override bool Enabled { get { return Server.zombie.Running || Server.lava.active; } }
static char[] trimChars = {' '};
public override void Use(Player p, string message) {

View File

@ -27,7 +27,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override bool Enabled { get { return Server.ZombieModeOn || Server.lava.active; } }
public override bool Enabled { get { return Server.zombie.Running || Server.lava.active; } }
public override void Use(Player p, string message) {
if (p == null) { MessageInGameOnly(p); return; }
@ -49,7 +49,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override bool Enabled { get { return Server.ZombieModeOn || Server.lava.active; } }
public override bool Enabled { get { return Server.zombie.Running || Server.lava.active; } }
public override void Use(Player p, string message) {
if (p == null) { MessageInGameOnly(p); return; }

View File

@ -25,7 +25,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdAlive() { }
public override void Use(Player p, string message) {

View File

@ -27,7 +27,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdBounties() { }
public override void Use(Player p, string message) {

View File

@ -26,7 +26,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public override void Use(Player p, string message) {
string[] args = message.Split(' ');

View File

@ -24,7 +24,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdDisInfect() { }
public override void Use(Player p, string message) {

View File

@ -24,7 +24,7 @@ namespace MCGalaxy.Commands
public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdEndRound() { }
public override void Use(Player p, string message) {

View File

@ -24,7 +24,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Other; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdFlipHead() { }
public override void Use(Player p, string message) {

View File

@ -25,7 +25,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdHuman() { }
public override void Use(Player p, string message) {

View File

@ -24,7 +24,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdInfect() { }
public override void Use(Player p, string message) {

View File

@ -25,7 +25,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Banned; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdInfected() { }
public override void Use(Player p, string message) {

View File

@ -25,7 +25,7 @@ namespace MCGalaxy.Commands
public override string type { get { return CommandTypes.Games; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdQueue() { }
public override void Use(Player p, string message) {

View File

@ -25,7 +25,7 @@ namespace MCGalaxy.Commands {
public override string type { get { return CommandTypes.Moderation; } }
public override bool museumUsable { get { return true; } }
public override LevelPermission defaultRank { get { return LevelPermission.Operator; } }
public override bool Enabled { get { return Server.ZombieModeOn; } }
public override bool Enabled { get { return Server.zombie.Running; } }
public CmdReferee() { }
public override void Use(Player p, string message) {

View File

@ -58,7 +58,7 @@ namespace MCGalaxy.Commands
}
static void HandleStart(Player p, string message, string[] args) {
if (Server.zombie.Status != ZombieGameStatus.NotStarted) {
if (Server.zombie.Running) {
Player.SendMessage(p, "There is already a Zombie Survival game currently in progress."); return;
}
if (args.Length == 2) {
@ -75,7 +75,7 @@ namespace MCGalaxy.Commands
}
static void HandleStop(Player p, string message, string[] args) {
if (Server.zombie.Status == ZombieGameStatus.NotStarted) {
if (!Server.zombie.Running) {
Player.SendMessage(p, "There is no Zombie Survival game currently in progress."); return;
}
Player.GlobalMessage("The current game of Zombie Survival will end this round!");
@ -83,7 +83,7 @@ namespace MCGalaxy.Commands
}
static void HandleForceStop(Player p, string message, string[] args) {
if (Server.zombie.Status == ZombieGameStatus.NotStarted) {
if (!Server.zombie.Running) {
Player.SendMessage(p, "There is no Zombie Survival game currently in progress."); return;
}
Server.s.Log("Zombie Survival ended forcefully by " + p.name);

View File

@ -14,7 +14,7 @@
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.
*/
*/
using System;
using MCGalaxy.Games;
@ -31,15 +31,15 @@ namespace MCGalaxy.Commands {
public override void Use(Player p, string message) {
string time = DateTime.Now.ToString("HH:mm:ss"); //DateTime.Now.ToString();
Player.SendMessage(p, "Server time is " + time);
if (Server.zombie.Status != ZombieGameStatus.NotStarted) {
int delta = (int)(Server.zombie.RoundEnd - DateTime.UtcNow).TotalSeconds;
if (delta > 0) {
Player.SendMessage(p, "&a" + delta + " %Sseconds until the round ends.");
} else {
delta = (int)(Server.zombie.RoundStart - DateTime.UtcNow).TotalSeconds;
if (delta > 0)
Player.SendMessage(p, "&a" + delta + " %Sseconds until the round starts.");
}
if (!Server.zombie.Running) return;
int delta = (int)(Server.zombie.RoundEnd - DateTime.UtcNow).TotalSeconds;
if (delta > 0) {
Player.SendMessage(p, "&a" + delta + " %Sseconds until the round ends.");
} else {
delta = (int)(Server.zombie.RoundStart - DateTime.UtcNow).TotalSeconds;
if (delta > 0)
Player.SendMessage(p, "&a" + delta + " %Sseconds until the round starts.");
}
}

View File

@ -113,6 +113,7 @@ namespace MCGalaxy.Commands {
if (File.Exists("text/lockdown/map/" + message.ToLower())) {
Player.SendMessage(p, "The level " + message + " is locked."); return false;
}
if (!Server.zombie.PlayerCanJoinLevel(p, lvl, p.level)) return false;
p.Loading = true;
Player[] players = PlayerInfo.Online.Items;
@ -153,8 +154,8 @@ namespace MCGalaxy.Commands {
}
internal static void CheckGamesJoin(Player p, Level oldLvl) {
Server.lava.PlayerJoinedLevel(p, oldLvl);
Server.zombie.PlayerJoinedLevel(p, oldLvl);
Server.lava.PlayerJoinedLevel(p, p.level, oldLvl);
Server.zombie.PlayerJoinedLevel(p, p.level, oldLvl);
if (p.inTNTwarsMap) p.canBuild = true;
TntWarsGame game = TntWarsGame.Find(p.level);

View File

@ -175,7 +175,7 @@ namespace MCGalaxy.Commands
Server.voteKickVotesNeeded = 0;
//Zombie
Server.ZombieModeOn = false;
Server.zombie.ResetState();
Server.startZombieModeOnStartup = false;
Server.zombie.noRespawn = true;
Server.zombie.noPillaring = true;

View File

@ -21,30 +21,43 @@ namespace MCGalaxy.Games {
public abstract class IGame {
/// <summary> Returns whether this game handed the player manually placing a block. </summary>
public virtual bool HandlesManualChange(Player p, ushort x, ushort y, ushort z,
byte action, byte tile, byte b) {
return false;
}
/// <summary> Returns whether this game handled the player moving to a new position. </summary>
public virtual bool HandlesMovement(Player p, ushort x, ushort y, ushort z,
byte rotX, byte rotY) {
return false;
}
/// <summary> Returns whether this game handled the player sending a chat message. </summary>
public virtual bool HandlesChatMessage(Player p, string message) {
return false;
}
/// <summary> Raised when a player joins the server. </summary>
public virtual void PlayerJoinedServer(Player p) { }
/// <summary> Raised when a player leaves the server. </summary>
public virtual void PlayerLeftServer(Player p) { }
/// <summary> Raised when a player joins this game. </summary>
public virtual void PlayerJoinedGame(Player p) { }
/// <summary> Raised when a player leaves this game. </summary>
public virtual void PlayerLeftGame(Player p) { }
public virtual void PlayerJoinedLevel(Player p, Level oldLvl) { }
/// <summary> Raised when a player moves to a different map/level. </summary>
public virtual void PlayerJoinedLevel(Player p, Level lvl, Level oldLvl) { }
public virtual bool PlayerCanJoinLevel(Player p, Level lvl, Level oldLvl) {
return true;
}
/// <summary> Raised when a player's money amount changes. </summary>
public virtual void PlayerMoneyChanged(Player p) { }
}
}

View File

@ -35,8 +35,8 @@ namespace MCGalaxy.Games {
return false;
}
public override void PlayerJoinedLevel(Player p, Level oldLevl) {
if (Server.lava.active && !Server.lava.sendingPlayers && Server.lava.map == p.level) {
public override void PlayerJoinedLevel(Player p, Level lvl, Level oldLevl) {
if (Server.lava.active && !Server.lava.sendingPlayers && Server.lava.map == lvl) {
if (Server.lava.roundActive) {
Server.lava.AnnounceRoundInfo(p);
Server.lava.AnnounceTimeLeft(!Server.lava.flooded, true, p);

View File

@ -39,7 +39,7 @@ namespace MCGalaxy.Games {
RoundInProgress = false;
RoundsDone++;
if (Status == ZombieGameStatus.NotStarted) {
if (!Running) {
return;
} else if (Status == ZombieGameStatus.InfiniteRounds) {
DoRound();
@ -61,7 +61,7 @@ namespace MCGalaxy.Games {
}
void DoRound() {
if (Status == ZombieGameStatus.NotStarted) return;
if (!Running) return;
List<Player> players = DoRoundCountdown();
RoundInProgress = true;
Random random = new Random();
@ -91,7 +91,7 @@ namespace MCGalaxy.Games {
UpdateAllPlayerStatus();
DoCoreGame(random);
if (Status == ZombieGameStatus.NotStarted) {
if (!Running) {
Status = ZombieGameStatus.LastRound; return;
} else {
HandOutRewards();
@ -112,19 +112,19 @@ namespace MCGalaxy.Games {
while (true) {
RoundStart = DateTime.UtcNow.AddSeconds(30);
CurLevel.ChatLevel("%4Round Start:%f 30...");
Thread.Sleep(20000); if (!Server.ZombieModeOn) return null;
Thread.Sleep(20000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 10...");
Thread.Sleep(10000); if (!Server.ZombieModeOn) return null;
Thread.Sleep(10000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 5...");
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
Thread.Sleep(1000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 4...");
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
Thread.Sleep(1000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 3...");
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
Thread.Sleep(1000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 2...");
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
Thread.Sleep(1000); if (!Running) return null;
CurLevel.ChatLevel("%4Round Start:%f 1...");
Thread.Sleep(1000); if (!Server.ZombieModeOn) return null;
Thread.Sleep(1000); if (!Running) return null;
int nonRefPlayers = 0;
List<Player> players = new List<Player>();
@ -241,7 +241,7 @@ namespace MCGalaxy.Games {
}
void EndRound(object sender, ElapsedEventArgs e) {
if (Status == ZombieGameStatus.NotStarted) return;
if (!Running) return;
CurLevel.ChatLevel("%4Round End:%f 5"); Thread.Sleep(1000);
CurLevel.ChatLevel("%4Round End:%f 4"); Thread.Sleep(1000);
CurLevel.ChatLevel("%4Round End:%f 3"); Thread.Sleep(1000);
@ -256,7 +256,7 @@ namespace MCGalaxy.Games {
RoundStart = DateTime.MinValue;
RoundEnd = DateTime.MinValue;
Bounties.Clear();
if (Status == ZombieGameStatus.NotStarted) return;
if (!Running) return;
Player[] alive = Alive.Items;
CurLevel.ChatLevel(Colors.lime + "The game has ended!");
@ -364,9 +364,7 @@ namespace MCGalaxy.Games {
Level1Vote = 0; Level2Vote = 0; Level3Vote = 0;
lastLevel1 = selectedLevel1; lastLevel2 = selectedLevel2;
if (Status == ZombieGameStatus.NotStarted || Status == ZombieGameStatus.LastRound)
return;
if (!Running || Status == ZombieGameStatus.LastRound) return;
if (initialChangeLevel) {
Server.votingforlevel = true;
@ -379,8 +377,7 @@ namespace MCGalaxy.Games {
Server.votingforlevel = false;
} else { Level1Vote = 1; Level2Vote = 0; Level3Vote = 0; }
if (Status == ZombieGameStatus.NotStarted || Status == ZombieGameStatus.LastRound)
return;
if (!Running || Status == ZombieGameStatus.LastRound) return;
if (Level1Vote >= Level2Vote) {
if (Level3Vote > Level1Vote && Level3Vote > Level2Vote) {

View File

@ -24,8 +24,7 @@ namespace MCGalaxy.Games {
public override bool HandlesManualChange(Player p, ushort x, ushort y, ushort z,
byte action, byte tile, byte b) {
if (Status == ZombieGameStatus.NotStarted
|| (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
if (!Running || (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
if (CurLevel.BuildType == BuildType.NoModify) {
p.RevertBlock(x, y, z); return true;
} else if (CurLevel.BuildType == BuildType.ModifyOnly
@ -66,8 +65,7 @@ namespace MCGalaxy.Games {
public override bool HandlesMovement(Player p, ushort x, ushort y, ushort z,
byte rotX, byte rotY) {
if (Status == ZombieGameStatus.NotStarted
|| (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
if (!Running || (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
if (!p.referee && noRespawn) {
if (p.pos[0] >= x + 70 || p.pos[0] <= x - 70 ) {
p.SendPos(0xFF, p.pos[0], p.pos[1], p.pos[2], p.rot[0], p.rot[1]);
@ -82,8 +80,7 @@ namespace MCGalaxy.Games {
}
public override bool HandlesChatMessage(Player p, string message) {
if (Status == ZombieGameStatus.NotStarted
|| (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
if (!Running || (p.level == null || !p.level.name.CaselessEq(CurLevelName))) return false;
if (Server.votingforlevel && HandleVote(p, message)) return true;
if (message[0] == '~' && message.Length > 1) {
@ -119,23 +116,23 @@ namespace MCGalaxy.Games {
}
public override void PlayerJoinedServer(Player p) {
if (Status == ZombieGameStatus.NotStarted || Server.ZombieOnlyServer) return;
if (!Running || Server.ZombieOnlyServer) return;
Player.SendMessage(p, "A Zombie Survival game is running! " +
"Type %T/g " + CurLevelName + " %Sto join.");
}
public override void PlayerJoinedLevel(Player p, Level oldLvl) {
public override void PlayerJoinedLevel(Player p, Level lvl, Level oldLvl) {
p.SendCpeMessage(CpeMessageType.BottomRight2, "");
p.SendCpeMessage(CpeMessageType.BottomRight1, "");
if (RoundInProgress && p.level.name.CaselessEq(CurLevelName)) {
if (Status != ZombieGameStatus.NotStarted && p != null) {
if (RoundInProgress && lvl.name.CaselessEq(CurLevelName)) {
if (Running && p != null) {
p.SendMessage("You joined in the middle of a round. &cYou are now infected!");
p.blockCount = 50;
InfectPlayer(p);
}
}
if (p.level.name.CaselessEq(CurLevelName)) {
if (lvl.name.CaselessEq(CurLevelName)) {
double startLeft = (RoundStart - DateTime.UtcNow).TotalSeconds;
if (startLeft >= 0)
p.SendMessage("%a" + (int)startLeft + " %Sseconds left until the round starts. %aRun!");
@ -163,9 +160,13 @@ namespace MCGalaxy.Games {
if (oldLvl != null && oldLvl.name.CaselessEq(CurLevelName))
UpdateAllPlayerStatus();
}
public override bool PlayerCanJoinLevel(Player p, Level lvl, Level oldLvl) {
return base.PlayerCanJoinLevel(p, lvl, oldLvl);
}
public override void PlayerMoneyChanged(Player p) {
if (Status == ZombieGameStatus.NotStarted || !p.level.name.CaselessEq(CurLevelName)) return;
if (!Running || !p.level.name.CaselessEq(CurLevelName)) return;
string moneyMsg = "&a" + p.money + " %S" + Server.moneys;
string stateMsg = " and you are " + (p.infected ? "&cdead" : "&aalive");
p.SendCpeMessage(CpeMessageType.Status3, moneyMsg + stateMsg);

View File

@ -53,6 +53,9 @@ namespace MCGalaxy.Games {
/// <summary> Current round status of the game. </summary>
public ZombieGameStatus Status = ZombieGameStatus.NotStarted;
/// <summary> Gets whether zombie survival is currently running. </summary>
public bool Running { get { return Status != ZombieGameStatus.NotStarted; } }
/// <summary> Whether a round is currently in progress. </summary>
public bool RoundInProgress = false;
@ -108,7 +111,6 @@ namespace MCGalaxy.Games {
public void Start(ZombieGameStatus status, int amount) {
if (UseLevelList && LevelList == null)
ChangeLevels = false;
Server.ZombieModeOn = true;
Status = status;
RoundInProgress = false;
initialChangeLevel = false;
@ -122,7 +124,7 @@ namespace MCGalaxy.Games {
/// <summary> If there are no infected players left, randomly selected one of the alive players to continue the infection. </summary>
public void AssignFirstZombie() {
if (Status == ZombieGameStatus.NotStarted || !RoundInProgress || Infected.Count > 0) return;
if (!Running || !RoundInProgress || Infected.Count > 0) return;
Random random = new Random();
Player[] alive = Alive.Items;
if (alive.Length == 0) return;
@ -202,7 +204,6 @@ namespace MCGalaxy.Games {
Status = ZombieGameStatus.NotStarted;
MaxRounds = 0;
initialChangeLevel = false;
Server.ZombieModeOn = false;
RoundInProgress = false;
RoundStart = DateTime.MinValue;
RoundEnd = DateTime.MinValue;

View File

@ -284,7 +284,7 @@ namespace MCGalaxy
public static event OnLevelLoaded LevelLoaded;
public bool ShouldSaveLevelFile() {
if (Server.ZombieModeOn &&
if (Server.zombie.Running &&
(name.CaselessEq(Server.zombie.CurLevelName)
|| name.CaselessEq(Server.zombie.LastLevelName))) return false;
if (Server.lava.active && Server.lava.HasMap(name)) return false;

View File

@ -58,7 +58,7 @@ namespace MCGalaxy {
RevertBlock(x, y, z); return;
}
if (Server.ZombieModeOn && Server.zombie.HandlesManualChange(this, x, y, z, action, type, b))
if (Server.zombie.Running && Server.zombie.HandlesManualChange(this, x, y, z, action, type, b))
return;
if ( Server.lava.active && Server.lava.HasPlayer(this) && Server.lava.IsPlayerDead(this) ) {
@ -905,7 +905,7 @@ return;
if (Server.Countdown.HandlesMovement(this, x, y, z, rotx, roty))
return;
if (Server.ZombieModeOn && Server.zombie.HandlesMovement(this, x, y, z, rotx, roty))
if (Server.zombie.Running && Server.zombie.HandlesMovement(this, x, y, z, rotx, roty))
return;
if (OnMove != null) OnMove(this, x, y, z);

View File

@ -510,7 +510,7 @@ namespace MCGalaxy {
internal static void SpawnEntity(Player p, Player dst, byte id, ushort x, ushort y, ushort z,
byte rotx, byte roty, string possession = "") {
if (!Server.ZombieModeOn || !p.infected) {
if (!Server.zombie.Running || !p.infected) {
dst.SendSpawn(id, p.color + p.name + possession, x, y, z, rotx, roty); return;
}
@ -864,7 +864,7 @@ Next: continue;
}
public void OnMoneyChanged() {
if (Server.ZombieModeOn) Server.zombie.PlayerMoneyChanged(this);
if (Server.zombie.Running) Server.zombie.PlayerMoneyChanged(this);
if (Server.lava.active) Server.lava.PlayerMoneyChanged(this);
}

View File

@ -154,7 +154,6 @@ namespace MCGalaxy
//Zombie
public static ZombieGame zombie;
public static bool ZombieModeOn = false;
public static bool startZombieModeOnStartup = false;
public static bool ZombieOnlyServer = true;
public static bool bufferblocks = true;