public static void Register( object key, IItemsContainer container, IItemsContainer[] allowedTargets = null, bool registerAllowedTargetsReverse = true) { //Api.Logger.Dev( // string.Format("Registering container for exchange:{0}(by {1}){2}{3}Allowed targets: {4}", // Environment.NewLine, // key.GetType().Name, // container, // Environment.NewLine, // allowedTargets?.Select(t => t.Id).GetJoinedString())); if (!ContainersOpenedBy.TryGetValue(key, out List <WrappedContainer> list)) { list = new List <WrappedContainer>(); ContainersOpenedBy.Add(key, list); } var clientItemsContainer = (IClientItemsContainer)container; var wrappedContainer = list.FirstOrDefault(p => p.Container == clientItemsContainer); if (wrappedContainer == null) { wrappedContainer = new WrappedContainer(clientItemsContainer); list.Add(wrappedContainer); if (!ActiveContainersReferencesCount.TryGetValue(clientItemsContainer, out int referencesCount)) { referencesCount = 1; ActiveContainersList.Add(clientItemsContainer); } else { referencesCount++; } ActiveContainersReferencesCount[clientItemsContainer] = referencesCount; } if (allowedTargets != null) { wrappedContainer.AddAllowedTargetContainers(allowedTargets); if (registerAllowedTargetsReverse) { foreach (var allowedTargetContainer in allowedTargets) { Register(key, allowedTargetContainer, new[] { container }, registerAllowedTargetsReverse: false); } } } }
public static void Register( object key, IItemsContainer container, IItemsContainer[] allowedTargets = null, bool registerAllowedTargetsReverse = true) { //Api.Logger.Dev( // string.Format("Registering container for exchange:{0}(by {1}){2}{3}Allowed targets: {4}", // Environment.NewLine, // key.GetType().Name, // container, // Environment.NewLine, // allowedTargets?.Select(t => t.Id).GetJoinedString())); if (!ContainersOpenedBy.TryGetValue(key, out var list)) { list = new List <WrappedContainer>(); ContainersOpenedBy.Add(key, list); } var clientItemsContainer = (IClientItemsContainer)container; var wrappedContainer = list.FirstOrDefault(p => p.Container == clientItemsContainer); if (wrappedContainer is null) { wrappedContainer = new WrappedContainer(clientItemsContainer); list.Add(wrappedContainer); if (!ActiveContainersReferencesCount.TryGetValue(clientItemsContainer, out var referencesCount)) { referencesCount = 1; ActiveContainersList.Add(clientItemsContainer); } else { referencesCount++; // Ensure the order is modified - same as if the container was added for the first time. // Otherwise order of container operations (such as Shift+Click to move item) // might be incorrect in some cases // (such as when inventory opened while crafting menu was opened). ActiveContainersList.Remove(clientItemsContainer); ActiveContainersList.Add(clientItemsContainer); } ActiveContainersReferencesCount[clientItemsContainer] = referencesCount; } if (allowedTargets is not null) { wrappedContainer.AddAllowedTargetContainers(allowedTargets); if (registerAllowedTargetsReverse) { foreach (var allowedTargetContainer in allowedTargets) { Register(key, allowedTargetContainer, new[] { container }, registerAllowedTargetsReverse: false); } } } }