Пример #1
0
        public ModFluid InsertFluid(int slot, ModFluid fluid, bool simulate = false)
        {
            if (fluid == null)
            {
                return(null);
            }

            ValidateSlotIndex(slot);

            if (!IsFluidValid(this, slot, fluid))
            {
                return(fluid);
            }

            ModFluid existing = Fluids[slot];

            int limit = GetVolumeLimit(slot);

            if (existing != null)
            {
                if (!fluid.Equals(existing))
                {
                    return(fluid);
                }

                limit -= existing.volume;
            }

            if (limit <= 0)
            {
                return(fluid);
            }

            bool reachedLimit = fluid.volume > limit;

            if (!simulate)
            {
                if (existing == null)
                {
                    Fluids[slot] = reachedLimit ? CopyFluidWithSize(fluid, limit) : fluid;
                }
                else
                {
                    this.Grow(slot, reachedLimit ? limit : fluid.volume);
                }

                OnContentsChanged(slot);
            }

            return(reachedLimit ? CopyFluidWithSize(fluid, fluid.volume - limit) : null);
        }