public override void FromTreeAttributes(ITreeAttribute tree, IWorldAccessor worldForResolving) { base.FromTreeAttributes(tree, worldForResolving); Inventory.FromTreeAttributes(tree.GetTreeAttribute("inventory")); if (Api != null) { Inventory.AfterBlocksLoaded(Api.World); } inputGrindTime = tree.GetFloat("inputGrindTime"); nowOutputFace = tree.GetInt("nowOutputFace"); if (worldForResolving.Side == EnumAppSide.Client) { List <int> clientIds = new List <int>((tree["clientIdsGrinding"] as IntArrayAttribute).value); quantityPlayersGrinding = clientIds.Count; string[] playeruids = playersGrinding.Keys.ToArray(); foreach (var uid in playeruids) { IPlayer plr = Api.World.PlayerByUid(uid); if (!clientIds.Contains(plr.ClientId)) { playersGrinding.Remove(uid); } else { clientIds.Remove(plr.ClientId); } } for (int i = 0; i < clientIds.Count; i++) { IPlayer plr = worldForResolving.AllPlayers.FirstOrDefault(p => p.ClientId == clientIds[i]); if (plr != null) { playersGrinding.Add(plr.PlayerUID, worldForResolving.ElapsedMilliseconds); } } updateGrindingState(); } if (Api?.Side == EnumAppSide.Client && clientDialog != null) { clientDialog.Update(inputGrindTime, maxGrindingTime()); } }
public override void FromTreeAtributes(ITreeAttribute tree, IWorldAccessor worldForResolving) { base.FromTreeAtributes(tree, worldForResolving); Inventory.FromTreeAttributes(tree.GetTreeAttribute("inventory")); if (api != null) { Inventory.AfterBlocksLoaded(api.World); } inputGrindTime = tree.GetFloat("inputGrindTime"); if (worldForResolving.Side == EnumAppSide.Client) { List <int> clientIds = new List <int>((tree["clientIdsGrinding"] as IntArrayAttribute).value); bool wasGrinding = quantityPlayersGrinding > 0; quantityPlayersGrinding = clientIds.Count; for (int i = 0; i < playersGrinding.Count; i++) { IPlayer plr = playersGrinding[i]; if (!clientIds.Contains(plr.ClientId)) { playersGrinding.Remove(plr); i--; } else { clientIds.Remove(plr.ClientId); } } for (int i = 0; i < clientIds.Count; i++) { IPlayer plr = worldForResolving.AllPlayers.FirstOrDefault(p => p.ClientId == clientIds[i]); if (plr != null) { playersGrinding.Add(plr); } } updateGrindingState(wasGrinding); } if (api?.Side == EnumAppSide.Client && clientDialog != null) { SetDialogValues(clientDialog.Attributes); } }