public void StartMixing(BasePlayer player) { if (IsOn()) { return; } List <Item> orderedContainerItems = GetOrderedContainerItems(base.inventory); int quantity; currentRecipe = RecipeDictionary.GetMatchingRecipeAndQuantity(Recipes, orderedContainerItems, out quantity); currentQuantity = quantity; if (!(currentRecipe == null) && (!currentRecipe.RequiresBlueprint || player.blueprints.HasUnlocked(currentRecipe.ProducedItem))) { if (base.isServer) { lastTickTimestamp = UnityEngine.Time.realtimeSinceStartup; } RemainingMixTime = currentRecipe.MixingDuration * (float)currentQuantity; TotalMixTime = RemainingMixTime; ReturnExcessItems(orderedContainerItems, player); if (RemainingMixTime == 0f) { ProduceItem(currentRecipe, currentQuantity); return; } InvokeRepeating(TickMix, 1f, 1f); SetFlag(Flags.On, true); SendNetworkUpdateImmediate(); } }
public override void ServerInit() { base.ServerInit(); ItemContainer itemContainer = base.inventory; itemContainer.canAcceptItem = (Func <Item, int, bool>)Delegate.Combine(itemContainer.canAcceptItem, new Func <Item, int, bool>(CanAcceptItem)); base.inventory.onItemAddedRemoved = OnItemAddedOrRemoved; RecipeDictionary.CacheRecipes(Recipes); }
private bool CanAcceptItem(Item item, int targetSlot) { if (item == null) { return(false); } if (!OnlyAcceptValidIngredients) { return(true); } if (GetItemWaterAmount(item) > 0) { item = item.contents.itemList[0]; } if (!(item.info == currentProductionItem)) { return(RecipeDictionary.ValidIngredientForARecipe(item, Recipes)); } return(true); }
// Start is called before the first frame update void Start() { recipeDictionary = new RecipeDictionary(); }